【问题标题】:Python: Multiplying a (4,1,2)-array with a (4,1) to get a (4,1,2) arrayPython:将 (4,1,2) 数组与 (4,1) 相乘得到 (4,1,2) 数组
【发布时间】:2023-03-08 01:37:01
【问题描述】:

正如标题所说,我基本上希望第二个矩阵(我们称之为 B)是第一个矩阵(我们称之为 A)的行的乘法列表。

我该怎么做呢? 示例:

A = np.array([[[ 1.,  3.]],
     [[ 1.,  4.]],
     [[ 1.,  5.]],
     [[ 1.,  8.]]])

B = np.array([[0],
     [1],
     [3],
     [8]], dtype=np.int64)

我希望结果是

C = np.array([[[0., 0.,]],
     [[1.,  4.]],
     [[3.,  15.]],
     [[8.,  64.]]])

【问题讨论】:

    标签: python arrays numpy multidimensional-array matrix-multiplication


    【解决方案1】:

    要在这种情况下进行广播,您需要给 B 一个新轴:

    >>> A * B[:,None,:]
    array([[[  0.,   0.]],
           [[  1.,   4.]],
           [[  3.,  15.]],
           [[  8.,  64.]]])
    

    【讨论】:

    • 等价于A * B[:, np.newaxis, :]
    【解决方案2】:

    您可能会发现np.einsum() 对 n 维数组很有用。在这种情况下,你可以这样做

    np.einsum('i...,i...->i...',A,B)
    

    得到你想要的答案。

    np.einsum('ijk,il->ijk',A,B)
    

    同样有效,而且更加明确。

    更多关于np.einsum()的信息可以在here找到。

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2019-10-13
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多