dot
adalah perkalian matriks, tetapi *
melakukan hal lain.
Kami memiliki dua array:
X
, bentuk (97,2)
y
, bentuk (2,1)
Dengan array Numpy, operasinya
X * y
dilakukan berdasarkan elemen, tetapi satu atau kedua nilai dapat diperluas dalam satu atau beberapa dimensi untuk membuatnya kompatibel. Operasi ini disebut penyiaran. Dimensi dengan ukuran 1 atau yang hilang dapat digunakan dalam penyiaran.
Dalam contoh di atas dimensi tidak sesuai, karena:
97 2
2 1
Di sini ada angka-angka yang saling bertentangan di dimensi pertama (97 dan 2). Itulah yang dikeluhkan ValueError di atas. Dimensi kedua akan baik-baik saja, karena nomor 1 tidak bertentangan dengan apa pun.
Untuk informasi lebih lanjut tentang aturan penyiaran: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Perlu diketahui bahwa jika X
dan y
bertipe numpy.matrix
, maka tanda bintang dapat digunakan sebagai perkalian matriks. Rekomendasi saya adalah menjauhinumpy.matrix
, ini cenderung mempersulit lebih dari sekedar menyederhanakan.)
Array Anda harus baik-baik saja dengan numpy.dot
; jika Anda mendapatkan kesalahan numpy.dot
, Anda pasti memiliki bug lain. Jika bentuknya salah numpy.dot
, Anda mendapatkan pengecualian yang berbeda:
ValueError: matrices are not aligned
Jika Anda masih mendapatkan kesalahan ini, harap posting contoh masalah minimal. Contoh perkalian dengan array berbentuk seperti milik Anda berhasil:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
seharusnya tidak bekerja (dan tidak), tetapinp.dot(X,y)
danX.dot(y))
harus berhasil (dan bagi saya mereka berhasil).