Katakanlah saya punya array NumPy, a
:
a = np.array([
[1, 2, 3],
[2, 3, 4]
])
Dan saya ingin menambahkan kolom nol untuk mendapatkan sebuah array, b
:
b = np.array([
[1, 2, 3, 0],
[2, 3, 4, 0]
])
Bagaimana saya bisa melakukan ini dengan mudah di NumPy?
a = np.random.rand((N,N))
kea = np.random.rand(N,N)
np.r_[ ... ]
dannp.c_[ ... ]
merupakan alternatif yang bermanfaat untukvstack
danhstack
, dengan tanda kurung siku [] alih-alih bulat ().Beberapa contoh:
(Alasan untuk tanda kurung siku [] alih-alih bulat () adalah bahwa Python mengembang misalnya 1: 4 di bujur sangkar - keajaiban kelebihan beban.)
sumber
np.c_[ * iterable ]
; lihat daftar ekspresi .Gunakan
numpy.append
:sumber
append
sebenarnya hanya meneleponconcatenate
Salah satu cara, menggunakan hstack , adalah:
sumber
dtype
parameter, itu tidak diperlukan dan bahkan tidak diizinkan. Meskipun solusi Anda cukup elegan, perhatikan untuk tidak menggunakannya jika Anda perlu "menambahkan" ke sebuah array. Jika Anda tidak dapat membuat seluruh array sekaligus dan mengisinya nanti, buat daftar array danhstack
semuanya sekaligus.Saya menemukan yang paling elegan berikut:
Keuntungannya
insert
adalah ia juga memungkinkan Anda untuk memasukkan kolom (atau baris) di tempat lain di dalam array. Juga, alih-alih menyisipkan nilai tunggal, Anda dapat dengan mudah memasukkan seluruh vektor, misalnya menduplikasi kolom terakhir:Yang mengarah ke:
Untuk waktunya,
insert
mungkin lebih lambat dari solusi JoshAdel:sumber
insert(a, -1, ...)
menambahkan kolom. Kurasa aku hanya akan menambahkannya.a.shape[axis]
. Saya. E. untuk menambahkan baris, Anda lakukannp.insert(a, a.shape[0], 999, axis=0)
dan untuk kolom, Anda lakukannp.insert(a, a.shape[1], 999, axis=1)
.Saya juga tertarik dengan pertanyaan ini dan membandingkan kecepatan
yang semuanya melakukan hal yang sama untuk setiap vektor input
a
. Pengaturan waktu untuk tumbuha
:Perhatikan bahwa semua varian yang tidak bersebelahan (khususnya
stack
/vstack
) pada akhirnya lebih cepat daripada semua varian yang bersebelahan.column_stack
(untuk kejelasan dan kecepatannya) tampaknya menjadi pilihan yang baik jika Anda memerlukan kedekatan.Kode untuk mereproduksi plot:
sumber
stack
,hstack
,vstack
,column_stack
,dstack
semua fungsi pembantu dibangun di atasnp.concatenate
. Dengan menelusuri definisi stack saya menemukan bahwanp.stack([a,a])
memanggilnp.concatenate([a[None], a[None]], axis=0)
. Mungkin bagus untuk menambahkannp.concatenate([a[None], a[None]], axis=0).T
perfplot untuk menunjukkan bahwanp.concatenate
selalu dapat setidaknya secepat fungsi pembantu.c_
dancolumn_stack
Kupikir:
lebih elegan.
sumber
np.concatenate juga berfungsi
sumber
np.concatenate
tampaknya menjadi 3 kali lebih cepat daripadanp.hstack
matriks 2x1, 2x2 dan 2x3.np.concatenate
juga sangat sedikit lebih cepat daripada menyalin matriks secara manual ke dalam matriks kosong dalam percobaan saya. Itu konsisten dengan jawaban Nico Schlömer di bawah ini.Dengan asumsi
M
adalah (100,3) ndarray dany
merupakan (100,) ndarrayappend
dapat digunakan sebagai berikut:Triknya adalah menggunakan
Ini mengonversi
y
ke array (100, 1) 2D.sekarang memberi
sumber
Saya suka jawaban JoshAdel karena fokus pada kinerja. Peningkatan kinerja kecil adalah untuk menghindari overhead menginisialisasi dengan nol, hanya untuk ditimpa. Ini memiliki perbedaan yang terukur ketika N besar, kosong digunakan sebagai ganti nol, dan kolom nol ditulis sebagai langkah terpisah:
sumber
b[:,-1] = 0
. Juga, dengan susunan yang sangat besar, perbedaan kinerjanp.insert()
menjadi diabaikan, yang mungkin membuatnp.insert()
lebih diinginkan karena ringkasnya.np.insert
juga melayani tujuannya.Ini menyisipkan nilai, di sini
new_col
, sebelum indeks yang diberikan, di sini diidx
sepanjang satu sumbu. Dengan kata lain, nilai-nilai yang baru dimasukkan akan menempatiidx
kolom dan memindahkan apa yang awalnya ada di dan setelahidx
mundur.sumber
insert
tidak ada di tempat karena orang dapat menganggap diberi nama fungsi (lihat dokumen terkait dalam jawabannya).Tambahkan kolom tambahan ke array numpy:
np.append
Metode Numpy mengambil tiga parameter, dua yang pertama adalah array numpy 2D dan ke-3 adalah parameter sumbu yang menginstruksikan sepanjang sumbu mana yang akan ditambahkan:Cetakan:
sumber
Agak terlambat ke pesta, tetapi belum ada yang memposting jawaban ini, jadi demi kelengkapan: Anda dapat melakukan ini dengan daftar pemahaman, pada array Python sederhana:
sumber
Bagi saya, cara selanjutnya terlihat cukup intuitif dan sederhana.
sumber
Dalam kasus saya, saya harus menambahkan kolom yang ke array NumPy
Setelah X.shape => (97, 2)
sumber
Ada fungsi khusus untuk ini. Ini disebut numpy.pad
Inilah yang dikatakan dalam dokumen:
sumber