Saya memiliki dua matriks
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
dan saya ingin mendapatkan produk elemen-bijaksana [[1*5,2*6], [3*7,4*8]]
,, setara
[[5,12], [21,32]]
saya telah mencoba
print(np.dot(a,b))
dan
print(a*b)
tapi keduanya memberikan hasil
[[19 22], [43 50]]
yang merupakan hasil kali matriks, bukan produk bijak. Bagaimana saya bisa mendapatkan produk elemen-bijaksana (alias produk Hadamard) menggunakan fungsi bawaan?
a
danb
bukan tipe matriks NumPy? Dengan kelas ini,*
mengembalikan produk dalam, bukan elemen-bijaksana. Tetapi untukndarray
kelas biasa ,*
berarti produk yang bijak.a
danb
array numpy? Juga, dalam pertanyaan Anda di atas, Anda menggunakanx
dany
untuk komputasi, bukana
danb
. Apakah itu hanya salah ketik?@
perkalian matriks dengan larik numpy, yang berarti sama sekali tidak ada alasan yang baik untuk menggunakan matriks di atas larik.a
danb
daftar. Mereka akan bekerja dinp.dot
; tapi tidak dia*b
. Jika Anda menggunakannp.array(a)
ataunp.matrix(a)
,*
berfungsi tetapi dengan hasil yang berbeda.Jawaban:
Untuk perkalian elementwise dari
matrix
objek, Anda dapat menggunakannumpy.multiply
:Hasil
Namun, Anda harus benar-benar menggunakan
array
bukanmatrix
.matrix
benda memiliki segala macam ketidaksesuaian yang mengerikan dengan ndarrays biasa. Dengan ndarrays, Anda hanya dapat menggunakan*
untuk perkalian elementwise:Jika Anda menggunakan Python 3.5+, Anda bahkan tidak kehilangan kemampuan untuk melakukan perkalian matriks dengan operator, karena
@
sekarang perkalian matriks :sumber
lakukan saja ini:
sumber
*
operator tampaknya melakukan perkalian elemen-bijaksana.Keduanya
np.multiply
dan*
akan menghasilkan perkalian bijak yang dikenal sebagai Produk Hadamard%timeit
adalah sihir ipythonsumber
Coba ini:
Di sini,
np.array(a)
mengembalikan tipe array 2Dndarray
dan perkalian duandarray
akan menghasilkan perkalian bijak elemen. Jadi hasilnya adalah:Jika Anda ingin mendapatkan matriks, lakukan dengan ini:
sumber