使用Python广播的np.dot()

时间:2015-07-01 16:22:25

标签: python numpy matrix numpy-broadcasting

我有两个numpy数组,一个形状(3000,),另一个是二十个3000乘3000矩阵的数组,即形状(20,3000,3000)

first.shape = (3000,)
second.shape = (20, 3000, 3000)

我正在做一个numpy dot产品。

import numpy as np
dotprod1 = np.dot( second, first)

这样可行,输出dotprod1是一个数组形状(20,3000)。

但是如果我想再次使用点积呢?

dotprod2 = np.dot( first, dotprod1)

这会出错。

ValueError: shapes (3000,) and (20,3000) not aligned: 3000 (dim 0) != 20 (dim 0)

我希望输出20个值。如何使用广播来做到这一点?

1 个答案:

答案 0 :(得分:1)

dotprod2 = np.dot( first, dotprod1)失败,因为first形状(3000, )dotprod1形状(20, 3000),交换它们并且错误将会消失(如果这是你的意图) ):

dotprod2 = np.dot(dotprod1, first)

此外,您还可以使用np.ndarray.dot使语义清晰:

dotprod2 = dotprod1.dot(first)