向量数组和矩阵数组之间的成对乘积

时间:2014-07-04 06:45:08

标签: python numpy

我有一个二维数组A,我在这里代表[v_1, v_2, v_3, ..., v_n]

我有一个3-d张量B,我在这里代表[m_1, m_2, m_3, ...n m_n]

A.type = numpy.ndarray

A.shape = (300, 4)

B.type = numpy.ndarray

B.shape = (300, 4, 2)

我希望得到1D数组C = A*BC = [u_1, u_2, u_3, ..., u_n] u_i = np.dot(v_i, m_i)

如果不将1重复到n并使用numpy.tensordot()优先于AB,我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用np.einsum功能执行此操作。这将让你给作为字符串提供的数组的每个维度一个字母(索引),并使用爱因斯坦和符号来处理。所以在你的情况下,我会说:

np.einsum( "ik,ikl->il", A,B )

所以在这种情况下我会命名A i,k - >的维度。 300,4和B的尺寸必须是i,k和其他东西,例如l - > 300,4,2然后用箭头指定你想要的尺寸。如果您没有在箭头后面的符号中提供字母(索引),则此维度将被累加。所以你做过“ik,ikl-> l”它会总结300维度。