Misalkan saya memiliki array numpy:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
dan saya memiliki "vektor:" yang sesuai
vector = np.array([1,2,3])
Bagaimana cara saya beroperasi di data
sepanjang setiap baris untuk mengurangi atau membagi sehingga hasilnya adalah:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Singkat cerita: Bagaimana cara melakukan operasi pada setiap baris array 2D dengan skalar 1D yang sesuai dengan setiap baris?
None
masih berfungsi sama dengannp.newaxis
. Saya tidak yakin apa penyiapan Anda, atau masalah sebenarnya yang Anda alami, tetapi jawabannya masih valid.Seperti yang telah disebutkan, mengiris dengan
None
atau dengannp.newaxes
adalah cara yang bagus untuk melakukan ini. Alternatif lain adalah menggunakan transposes dan penyiaran, seperti dalamdan
Untuk array berdimensi lebih tinggi, Anda mungkin ingin menggunakan
swapaxes
metode array NumPy ataurollaxis
fungsi NumPy . Ada banyak cara untuk melakukan ini.Untuk penjelasan lebih lengkap tentang penyiaran, lihat http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
sumber
Solusi JoshAdel menggunakan np.newaxis untuk menambahkan dimensi. Alternatifnya adalah menggunakan reshape () untuk menyelaraskan dimensi dalam persiapan penyiaran .
Melakukan reshape () memungkinkan dimensi berbaris untuk penyiaran:
Perhatikan bahwa
data/vector
tidak apa-apa, tetapi itu tidak memberi Anda jawaban yang Anda inginkan. Ini membagi masing-masing kolom dariarray
(bukannya setiap baris ) oleh setiap elemen yang sesuaivector
. Itulah yang akan Anda dapatkan jika Anda secara eksplisit mengubah bentukvector
menjadi,1x3
bukan3x1
.sumber
Cara pythonic untuk melakukan ini adalah ...
Ini menangani pembentukan kembali dan juga hasilnya dalam format floating point. Dalam jawaban lain, hasil dalam format bilangan bulat bulat.
#CATATAN: Tidak ada kolom di data dan vektor yang harus cocok
sumber
Menambah jawaban stackoverflowuser2010, dalam kasus umum Anda bisa menggunakan
Ini akan mengubah vektor Anda menjadi
column matrix/vector
. Memungkinkan Anda melakukan operasi elementwise sesuai keinginan. Setidaknya bagi saya, ini adalah cara yang paling intuitif tentangnya dan karena (dalam banyak kasus) numpy hanya akan menggunakan tampilan memori internal yang sama untuk pembentukan kembali itu juga efisien.sumber
.reshape(-1,1)
adalah cara paling intuitif untuk menggunakan penyiaran.