【问题标题】:Want to define an ndarray in numpy elementwise想在numpy elementwise中定义一个ndarray
【发布时间】:2018-07-09 14:36:30
【问题描述】:

我有 2 个二维 numpy 数组,形状为 (i,j) 的 A 和形状为 (i, k) 的 B (i, k),其中 j >> k。我想定义一个新的 3d 数组 C,使得 C 中的每个元素都是 A 中的每一列与整个矩阵 B 的广播元素乘积。换句话说,作为一个普通的 python 循环,我会这样做

for x in range(j):
    C[x] = A[:,x]*B

但是,在这种情况下 j 非常大,如果我能够使用 Numpy 的功能来定义一个 ndarray C 元素,就像在上面的循环中一样,这将使我受益匪浅。

感谢您的帮助

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    你可以像这样使用广播:

    a.T[:, :, None] * b
    

    例子:

    import numpy as np
    np.random.seed(444)
    
    i, j, k = 2, 10, 3
    a = np.random.randn(i, j)
    b = np.random.randn(i, k)
    c = a.T[:, :, None] * b
    print(c.shape)
    # (10, 2, 3)
    

    转置源于您希望对a 中的每一列进行内部操作,而[:, :, None] 扩展维度以启用广播,如NumPy 的broadcasting rules 中所述。

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2023-03-10
      • 2018-06-05
      • 1970-01-01
      • 2018-10-10
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多