各种乘法的区别 “点积、外积、数乘...等

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)]]

猜你喜欢

转载自blog.csdn.net/qq_41853536/article/details/83215013