Bagaimana cara menambahkan baris ke array numpy?
Saya memiliki array A:
A = array([[0, 1, 2], [0, 2, 0]])
Saya ingin menambahkan baris ke array ini dari array X lain jika elemen pertama dari setiap baris dalam X memenuhi kondisi tertentu.
Array numpy tidak memiliki metode 'menambahkan' seperti itu dari daftar, atau begitulah tampaknya.
Jika A dan X adalah daftar, saya hanya akan melakukan:
for i in X:
if i[0] < 3:
A.append(i)
Apakah ada cara numpythonic untuk melakukan hal yang sama?
Terima kasih, S ;-)
Jawaban:
Apa
X
? Jika ini adalah array 2D, bagaimana Anda bisa membandingkan barisnya dengan angkai < 3
:?Sunting setelah komentar OP:
tambahkan ke
A
semua baris dariX
mana elemen pertama< 3
:sumber
A
. Jelas untuk masalah kecil seperti dalam jawaban ini ini bukan masalah, tetapi bisa lebih mengganggu untuk data besar.yah kamu bisa melakukan ini:
sumber
Karena pertanyaan ini sudah 7 tahun sebelumnya, dalam versi terbaru yang saya gunakan adalah numpy versi 1.13, dan python3, saya melakukan hal yang sama dengan menambahkan baris ke matriks, ingatlah untuk menempatkan braket ganda pada argumen kedua, jika tidak, itu akan meningkatkan kesalahan dimensi.
Di sini saya menambahkan pada matriks A
dengan satu baris
penggunaan yang sama di
np.r_
Hanya untuk intersted seseorang, jika Anda ingin menambahkan kolom,
array = np.c_[A,np.zeros(#A's row size)]
mengikuti apa yang kami lakukan sebelumnya pada matriks A, menambahkan kolom padanya
sumber
Jika tidak ada perhitungan yang diperlukan setelah setiap baris, itu jauh lebih cepat untuk menambahkan baris dalam python, kemudian konversikan menjadi numpy. Berikut adalah tes waktu menggunakan python 3.6 vs numpy 1.14, menambahkan 100 baris, satu per satu:
Jadi, solusi sederhana untuk pertanyaan awal, dari tujuh tahun yang lalu, adalah dengan menggunakan vstack () untuk menambahkan baris baru setelah mengonversi baris ke array numpy. Tetapi solusi yang lebih realistis harus mempertimbangkan kinerja vstack yang buruk dalam situasi seperti itu. Jika Anda tidak perlu menjalankan analisis data pada array setelah setiap penambahan, lebih baik untuk buffer baris baru ke daftar python baris (daftar daftar, benar-benar), dan menambahkannya sebagai grup ke array numpy menggunakan vstack () sebelum melakukan analisis data apa pun.
sumber
Anda juga dapat melakukan ini:
sumber
np.concatenate((A,newrow), axis=0)
1.12.1
(dan dalam Python 3), sepertinya mencoba untuk menggabungkan vektor ke matriksValueError: all the input arrays must have same number of dimensions
. Sepertinya ia ingin vektor untuk dibentuk kembali secara eksplisit menjadi kolom atau vektor baris sebelum mau digabungkan.newrow = [[1,2,3]]
sumber
Jika Anda dapat melakukan konstruksi dalam satu operasi, maka jawaban seperti vstack-with-fancy-indexing adalah pendekatan yang bagus. Tetapi jika kondisi Anda lebih rumit atau baris Anda masuk dengan cepat, Anda mungkin ingin menumbuhkan array. Sebenarnya cara numpythonic untuk melakukan sesuatu seperti ini - secara dinamis menumbuhkan array - adalah dengan secara dinamis menumbuhkan daftar:
Daftar sangat dioptimalkan untuk pola akses semacam ini; Anda tidak memiliki pengindeksan multidimensi numpy yang nyaman saat berada dalam bentuk daftar, tetapi selama Anda menambahkan sulit untuk melakukan lebih baik daripada daftar array baris.
sumber
Saya menggunakan 'np.vstack' yang lebih cepat, EX:
sumber
Anda dapat menggunakan
numpy.append()
untuk menambahkan deretan ke array numpty dan membentuk kembali ke matriks nanti.sumber