使用 numpy einsum 计算矩阵列向量的内积

Del*_*gan 3 python numpy matrix multidimensional-array numpy-einsum

假设我有一个像这样的 numpy 矩阵:

[[   1    2    3]
 [  10  100 1000]]
Run Code Online (Sandbox Code Playgroud)

我想用它自己计算每列的内积,所以结果是:

[1*1 + 10*10    2*2 + 100*100    3*3 + 1000*1000] == [101, 10004, 1000009]
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以使用该einsum函数(并更好地理解它)。

到目前为止,我能得到的最接近的结果是:

import numpy as np

arr = np.array([[1, 2, 3], [10, 100, 1000]])

res = np.einsum('ij,ik->jk', arr, arr)

# [[    101    1002   10003]
#  [   1002   10004  100006]
#  [  10003  100006 1000009]]
Run Code Online (Sandbox Code Playgroud)

对角线包含预期结果,但我想知道是否可以避免边缘计算。

Div*_*kar 5

使用np.einsum,像这样 -

np.einsum('ij,ij->j',arr,arr)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [243]: np.einsum('ij,ij->j',arr,arr)
Out[243]: array([    101,   10004, 1000009])
Run Code Online (Sandbox Code Playgroud)

或与np.sum-

In [244]: (arr**2).sum(0)
Out[244]: array([    101,   10004, 1000009])
Run Code Online (Sandbox Code Playgroud)

或使用numexpr模块-

In [248]: import numexpr as ne

In [249]: ne.evaluate('sum(arr**2,0)')
Out[249]: array([    101,   10004, 1000009])
Run Code Online (Sandbox Code Playgroud)