【问题标题】:Python Dot-Product with Matrix-elements带有矩阵元素的 Python 点积
【发布时间】:2016-05-19 14:06:20
【问题描述】:

我想在 python 中实现以下计算:

有 和 .

这里的 是矩阵本身。 因此,python 应该计算矩阵乘以向量的乘法,其中向量元素是矩阵。如果没有 for 循环,这可能吗?

【问题讨论】:

  • Ist es möglich im chinese zu erklären ;) ?
  • 是的,很抱歉;)
  • E 总是 [1, 1; 1, -1] 或者可以是任意的?
  • E 是任意的但正方形的。 E 和 v 可以是任意大小,M 也是如此。

标签: python numpy


【解决方案1】:

使用 numpy:

In [1]: import numpy as np

In [2]: M1 = np.array([[1, 2], [3, 4]])

In [3]: M2 = np.array([[10, 20], [30, 40]])

In [4]: E = np.array([[1, 1], [1, -1]])

In [5]: v = np.array([M1, M2])

In [6]: np.tensordot(E, v, 1)
Out[6]: 
array([[[ 11,  22],
        [ 33,  44]],

       [[ -9, -18],
        [-27, -36]]])

【讨论】:

  • einsum 等价于 np.einsum('ij,jkl->ikl', E, v)
  • 谢谢,@hpaulj。我知道会有一些 einsum 方法来做到这一点,但我没想到。
  • 我想摆弄一下; E 的对称性使得 ij v ji 模棱两可。但是您对1 参数的选择最有意义(E 的最后一个,v 的第一个)。
【解决方案2】:

如果你熟悉爱因斯坦求和符号,你可以想象 E 下标为 E_ij,v 下标为 v_jkl,并且更一般地将 @steve-kern 示例中的 np.tensordot 写为:

In [6]: np.einsum('ij,jkl',E,v)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多