假设我有矩阵 A 和 B。
A 是一个三维数组/张量(?)。
[1,2,3,4]
[5,6,7,8]
[1,2,3,4]
[5,6,7,8]
有 4 个不同的二维矩阵,如上面的三维矩阵。
B 是一个矩阵。
[1,2,3,4]
B 中也有 4 个,每个都是相同的。
如何将 B 中的每个向量(?)与 A 中的每个二维矩阵相乘。
[1,2,3,4]*[1,2,3,4]*[1;2;3;4]
[5,6,7,8]
[1,2,3,4]
[5,6,7,8]
需要进行四次上述类型的乘法才能得到四个 4x1 向量。 我已经用 numpy 尝试过:
y = numpy.arange(4).reshape(1,4)
z = numpy.arange(64).reshape(4,4,4)
y.dot(z).dot(numpy.transpose(y))
------
Output:
array([[[ 420],
[ 996],
[1572],
[2148]]])
它按照我想要的方式工作。但我不知道 numpy 是如何广播的,我想知道出于学习目的,以及其他用于处理不同库中的矩阵的包以不同的方式处理广播。我尝试以不同的方式平铺 B 以获得相同的结果,但没有任何效果。如果我没有清楚地解释任何内容,请告诉我。
也更愿意从 numpy 获得 4x1 而不是 3d 返回。
最佳答案
您可能想查看np.einsum
。举个例子:
>>> mat = np.arange(80).reshape(4, 4, 5)
>>> vec = np.arange(12).reshape(3, 4)
>>> np.einsum('ij,jkl,ik->il', vec, mat, vec)
array([[ 2100, 2136, 2172, 2208, 2244],
[20900, 21384, 21868, 22352, 22836],
[58900, 60344, 61788, 63232, 64676]])
如果我没有弄错索引,我有 5 个形状为 4x4 的矩阵和 3 个长度为 4 的向量,并且正在用每个向量计算每个矩阵的 3x5 二次形式。
关于python - 乘以特定维度矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22668100/