我有一个二维数组 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)
我想要获取一维数组C = A*B
,使得C = [u_1, u_2, u_3, ..., u_n]
,其中 u_i = np.dot(v_i, m_i)
如何在不迭代 1
到 n
并在 A
上使用 numpy.tensordot()
的情况下做到这一点> 和 B
?
最佳答案
您可以使用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 维上求和。
关于python - 向量数组和矩阵数组之间的成对积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568189/