假设我有两个数组:
import numpy as np
a=np.array([[1,2],
[3,4]])
b=np.array([[1,2],
[3,4]])
我想按元素乘以数组然后对元素求和,即1*1 + 2*2 + 3*3 + 4*4 = 30
我可以使用:
np.tensordot(a, b, axes=((-2,-1),(-2,-1)))
>>> array(30)
现在,假设数组a
和b
是 2×2×2 数组:
a=np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
b=np.array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
并且我想对每个组执行相同的操作,即[[1,2],[3,4]]
与[[1,2],[3,4]]
then 元素相加的时间,与[[5,6],[7,8]]
. 结果应该是array([ 30, 174])
, where30 = 1*1 + 2*2 + 3*3 + 4*4
和174 = 5*5 + 6*6 + 7*7 + 8*8
。有没有办法使用 tensordot 做到这一点?
PS
我明白在这种情况下你可以简单地使用 sum 或 einsum:
np.sum(a*b,axis=(-2,-1))
>>> array([ 30, 174])
np.einsum('ijk,ijk->i',a,b)
>>> array([ 30, 174])
但这只是一个简化的示例,我需要使用它,tensordot
因为它更快。
谢谢你的帮助!!