Saya memiliki dua array satu dimensi sederhana di NumPy . Saya harus bisa menggabungkan mereka menggunakan numpy.concatenate . Tapi saya mendapatkan kesalahan ini untuk kode di bawah ini:
TypeError: hanya array panjang-1 yang dapat dikonversi ke skalar Python
Kode
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)
Mengapa?
python
arrays
numpy
concatenation
numpy-ndarray
highBandWidth
sumber
sumber
np.concatenat(..., axis)
. Jika Anda ingin menumpuknya secara vertikal, gunakannp.vstack
. Jika Anda ingin menumpuknya (ke dalam beberapa array) secara horizontal, gunakannp.hstack
. (Jika Anda ingin menumpuknya dengan mendalam, yaitu dimensi ke-3, gunakannp.dstack
). Perhatikan bahwa yang terakhir mirip dengan pandapd.concat
Jawaban:
Garisnya harus:
Array yang ingin Anda gabungkan harus dilewatkan sebagai urutan, bukan sebagai argumen terpisah.
Dari dokumentasi NumPy :
Itu mencoba menafsirkan Anda
b
sebagai parameter sumbu, itulah sebabnya ia mengeluh tidak bisa mengubahnya menjadi skalar.sumber
numpy.concatenate(a1, a2, a3)
ataunumpy.concatenate(*[a1, a2, a3])
jika Anda suka. Cairan Python cukup sehingga perbedaannya terasa lebih kosmetik daripada substansial, tetapi bagus ketika API konsisten (misalnya jika semua fungsi numpy yang mengambil daftar argumen panjang variabel memerlukan urutan eksplisit).def concatx(*sequences, **kwargs)
). Ini tidak ideal karena Anda sepertinya tidak dapat memberi nama kata kunci args secara eksplisit dalam tanda tangan dengan cara ini, tetapi ada beberapa solusi.Ada beberapa kemungkinan untuk menggabungkan array 1D, misalnya,
Semua opsi tersebut sama-sama cepat untuk array besar; untuk yang kecil,
concatenate
memiliki sedikit keunggulan:Plot dibuat dengan perfplot :
sumber
np.concatenate
. Mereka hanya memijat daftar input dengan berbagai cara sebelumnya.np.stack
misalnya menambahkan dimensi ekstra ke semua array input. Lihatlah kode sumber mereka. Hanyaconcatenate
dikompilasi.np.concatenate
membuat salinan input. Memori dan biaya waktu ini lebih besar daripada waktu yang dihabiskan untuk 'memijat' input.Parameter pertama yang
concatenate
seharusnya menjadi urutan array untuk digabungkan:sumber
Alternatif lain untuk menggunakan bentuk singkat "concatenate" yang bisa berupa "r _ [...]" atau "c _ [...]" seperti yang ditunjukkan pada contoh kode di bawah ini (lihat http://wiki.scipy.org / NumPy_for_Matlab_Users untuk informasi tambahan):
Yang mengakibatkan:
sumber
vector_b = [1,1,1,1] #short form of "array"
, ini sama sekali tidak benar. vector_b akan menjadi tipe daftar Python standar. Namun Numpy cukup pandai menerima urutan alih-alih memaksa semua input menjadi tipe numpy.array.Berikut adalah lebih pendekatan untuk melakukan hal ini dengan menggunakan
numpy.ravel()
,numpy.array()
, memanfaatkan fakta bahwa 1D array dapat dibongkar menjadi elemen polos:sumber
Beberapa fakta lagi dari numpy docs :
Dengan sintaks sebagai
numpy.concatenate((a1, a2, ...), axis=0, out=None)
axis = 0 untuk concatenation baris-bijaksana axis = 1 untuk concatenation kolom-bijaksana
Saya harap ini membantu!
sumber