python - 矩阵乘以 numpy 矩阵数组

标签 python arrays numpy

我正在扩展旨在对 2 个向量执行函数的代码,以便它可以处理 2 个向量数组。我使用 numpy.dot 来计算两个 3x3 矩阵的乘积。现在我想用 3x3 矩阵数组来完成此操作。我无法弄清楚如何使用 numpy.einsum 来做到这一点,但我认为这就是我所需要的,我只是在努力理解它是如何工作的。

这是我想要使用循环的示例。有没有办法在没有循环的情况下做到这一点?

>>> import numpy as np
>>> m = np.arange(27).reshape(3,3,3)
>>> print m
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
>>> m2 = np.zeros(m.shape)
>>> for i in length(m):
        m2[i] = np.dot(m[i],m[i])
>>> print m2
    array([[[   15.,    18.,    21.],
            [   42.,    54.,    66.],
            [   69.,    90.,   111.]],

           [[  366.,   396.,   426.],
            [  474.,   513.,   552.],
            [  582.,   630.,   678.]],

           [[ 1203.,  1260.,  1317.],
            [ 1392.,  1458.,  1524.],
            [ 1581.,  1656.,  1731.]]])

最佳答案

我在这篇文章中发现了 numpy.einsum 语法 Python, numpy, einsum multiply a stack of matrices这就是我想要的。我不清楚为什么这样做有效,并且想了解如何构建索引字符串以供将来使用。

>>> print np.einsum('fij,fjk->fik', V, V)
    [[[  15   18   21]
      [  42   54   66]
      [  69   90  111]]

     [[ 366  396  426]
      [ 474  513  552]
      [ 582  630  678]]

     [[1203 1260 1317]
      [1392 1458 1524]
      [1581 1656 1731]]]

关于python - 矩阵乘以 numpy 矩阵数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28892469/

相关文章:

python - Numpy 在转置矩阵时如何移动数据?

python - Pandas if/then 聚合

python - 将 Tiff 图像 float 到 numpy 数组

python - 如何在系列的多个条件下将值设置为 np.nan?

python - 使用 Django 将 raw_post_data 保存到 FileField

java - 按升序对二维数组进行排序

javascript - 获取随机范围选择的最大值

python - Pandas - 如何设置规则来选择要删除的重复项

python - 无法在 Firebase 实时数据库中使用推送写入多个 JSON 记录

javascript - 按值获取数组索引