1. 程式人生 > >各種乘法的區別 “點積、外積、數乘...等

各種乘法的區別 “點積、外積、數乘...等

I've seen several conventions, including ⋅⋅, ∘∘, ∗∗, ⊗⊗, and ⊙⊙. However, most of these have overloaded meanings (see http://en.wikipedia.org/wiki/List_of_mathematical_symbols).

Thus, in my personal experience, the best choice I've found is:

⊙(\odot) -- to me the dot makes it look naturally like a multiply operation (unlike other suggestions I've seen like ⋄⋄) so is relatively easy to visually parse, but does not have an overloaded meaning as far as I know.
Also:

This question comes up often in multi-dimensional signal processing, so I don't think just trying to avoid vector multiplies is an appropriate notation solution. One important example is when you map from discrete coordinates to continuous coordinates by x=i⊙Δ+bx=i⊙Δ+b where ii is an index vector, ΔΔ is sample spacing (say in mm), bb is an offset vector, and xx is spatial coordinates (in mm). If sampling is not isotropic, then ΔΔ is a vector and element-wise multiplication is a natural thing to want to do. While in the above example I could avoid the problem by writing xk=ikΔk+bkxk=ikΔk+bk, having a symbol for element-wise multiplication lets us mix and match matrix multiplies and elementwise multiplies, for example y=A(i⊙Δ)+by=A(i⊙Δ)+b.
Another alternative notation I've seen for z=x⊙yz=x⊙y for vectors is z=z= diag(x)y(x)y. While this technically works for vectors, I find the ⊙⊙ notation to be far more intuitive. Furthermore, the "diag" approach only works for vectors -- it doesn't work for the Hadamard product of two matrices.
Often I have to play nicely with documents that other people have written, so changing the overloaded operator (like changing dot products to 〈⋅,⋅〉〈⋅,⋅〉 notation) often isn't an option, unfortunately.
Thus I recommend ⊙, as it is the only option I have yet to come across that has seems to have no immediate drawbacks.

numpy中矩陣乘法,星乘(*)和點乘(.dot)的區別(對應元素相乘 element-wise product: np.multiply(), 或 *)

import numpy
a = numpy.array([[1,2],
                 [3,4]])
b = numpy.array([[5,6],
                 [7,8]])


a*b
>>>array([[ 5, 12],
          [21, 32]])

a.dot(b)
>>>array([[19, 22],
          [43, 50]])

numpy.dot(a,b)
>>>array([[19, 22],
          [43, 50]])

numpy.dot(b,a)
>>>array([[23, 34],
          [31, 46]])

總結:

星乘表示矩陣內各對應位置相乘,矩陣a*b下標(0,0)=矩陣a下標(0,0) x 矩陣b下標(0,0);

點乘表示求矩陣內積,二維陣列稱為矩陣積(mastrix product)。

用文字表述:

所得到的陣列中的每個元素為,第一個矩陣中與該元素行號相同的元素與第二個矩陣與該元素列號相同的元素,兩兩相乘後再求和。

文字難以理解,直接上圖:

綜上所述,二維矩陣a*b下標(0,1)=矩陣a下標(0,) x 矩陣b下標(,1)

補充:

一維矩陣下標

[(0),(1),(2),(3)]

二維矩陣下標

[[(0,0),(0,1),(0,2),(0,3)],
 [(1,0),(1,1),(1,2),(1,3)],
 [(2,0),(2,1),(2,2),(2,3)],
 [(3,0),(3,1),(3,2),(3,3)]]