python - 乘以特定维度矩阵

标签 python numpy matrix

假设我有矩阵 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/

相关文章:

python - 无法理解 numpy.random.RandomState() 的输出

r - "could not find function H"从 R 中的 txt 文件加载的变量

python - 如何迭代枚举 Flag 子类中的 *distinct* 标志?

Python 3 内存分析器或简单的替代方案

python - Python 列表中的额外元素

python - 使用键将字典与numpy结合

python - 在没有数据透视表的情况下展平 pandas DataFrame

python pandas dataframe 乘以匹配索引或行名称的列

java - 矩阵到字符串输出

java - 在文本文件中转置矩阵的有效方法是什么?