在《 NumPy v1.15参考指南》中,documentation for numpy.dot使用“和积”的概念。
即,我们阅读以下内容:
- 如果a是N-D数组,b是1-D数组,则它是a和b的最后一个轴上的总和。
- 如果a是一个N-D数组而b是一个M-D数组(其中M> = 2),则它是a的最后一个轴与b的倒数第二个轴的和积:
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
“和积”概念的定义是什么?
(例如,在Wikipedia上找不到这样的定义。)
答案 0 :(得分:0)
https://en.wikipedia.org/wiki/Matrix_multiplication
That is, the entry c[i,j] of the product is obtained by multiplying
term-by-term the entries of the ith row of A and the jth column of B,
and summing these m products. In other words, c[i,j] is the dot product
of the ith row of A and the jth column of B.
https://en.wikipedia.org/wiki/Dot_product
Algebraically, the dot product is the sum of the products of the
corresponding entries of the two sequences of numbers.
在早期的数学课程中,您是不是通过一根手指横穿A
的行并沿B
的列向下滑动,乘以数字对并将它们相加来求矩阵乘积的?该动议是我对如何使用该产品的直觉的一部分。
对于第二个参数为一维的情况,np.dot
和np.matmul
产生相同的结果,但对动作的描述不同:
如果a
是一个N-D数组,而b
是一个一维数组,则它是
a
和b
的最后一个轴。
如果第二个参数为1-D,则将其提升为矩阵 在其尺寸后附加1。矩阵相乘后 附加的1被删除。
在[103]中:np.dot([[1,2 ,, [3,4]],[1,2]) Out [103]:array([5,11]) 在[104]中:np.matmul([[1,2 ,, [3,4]],[1,2]) Out [104]:array([5,11])
将维度附加到B
上可以做到:
In [105]: np.matmul([[1,2],[3,4]], [[1],[2]])
Out[105]:
array([[ 5],
[11]])
最后一个是(2,2),其中(2,1)=>(2,1)
有时候用einsum
来表达动作是更清楚的:
In [107]: np.einsum('ij,j->i', [[1,2],[3,4]], [1,2])
Out[107]: array([ 5, 11])
j
,两个数组的最后一个轴都是“求和”的轴。