“是什么意思?”;和积;如Numpy文档中所述?

“是什么意思?”;和积;如Numpy文档中所述?,numpy,Numpy,在NumPy v1.15参考指南中,使用了“和积”的概念 即,我们阅读了以下内容: 如果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]) “和积”概念的定义是什么? (例如,在维基百科上找不到这样的定义。) 在早期的数学课上,你是否学会了用一根手指在A的行上和B的列上移动矩阵积,然后对数对进行乘法和求

在NumPy v1.15参考指南中,使用了“和积”的概念

即,我们阅读了以下内容:

  • 如果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])
“和积”概念的定义是什么?
(例如,在维基百科上找不到这样的定义。)

在早期的数学课上,你是否学会了用一根手指在
A
的行上和
B
的列上移动矩阵积,然后对数对进行乘法和求和?这个动作是我直觉的一部分,我知道这个产品是如何产生的


对于1d第二个参数的情况,
np.dot
np.matmul
产生相同的结果,但描述动作的方式不同:

  • 如果
    a
    是N-D数组,而
    b
    是1-D数组,则它是
    a
    b
    的最后一个轴

  • 如果第二个参数是1-D,则通过 将1附加到其尺寸标注。矩阵乘法后 附加的1被删除

    [103]中的np.dot([1,2],[3,4],[1,2]) Out[103]:数组([5,11]) 在[104]:np.matmul([1,2],[3,4],[1,2]) Out[104]:数组([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
,两个数组的最后一个轴都是“求和”的轴。

对应元素的乘积之和<代码>np.点([3,4,4],[4,3,2])与
(3*4)+(4*3)+(4*2)
相同。我不认为“和积”是一个技术术语,听起来更像是他们在进行过程中编造的。它是
和积
的缩写,被广泛使用。@hpaulj听起来更像是和积。(相信我,我是德国人,我对复合名词有一两点了解)与@Paul Panzer有着相同的理解,我发现“和积”一词令人困惑,更愿意称之为“积和”,因此我感到困惑。我同意,矩阵积的情况确实很熟悉。相比之下,我没有得到矩阵*向量积背后的理论直觉,比如
np.dot([1,2],[3,4],[1,2])
产生
数组([5,11])
,特别是从形状/维度的角度。这实际上是在做
np.array((np.dot([1,2],[1,2]),np dot([3,4],[1,2]))
,即2个矢量点积,每行
A
np.array((1+4,3+8))
In [105]: np.matmul([[1,2],[3,4]], [[1],[2]])
Out[105]: 
array([[ 5],
       [11]])
In [107]: np.einsum('ij,j->i', [[1,2],[3,4]], [1,2])
Out[107]: array([ 5, 11])