【问题标题】:Multiplying Numpy 3D arrays by 1D arrays将 Numpy 3D 数组乘以 1D 数组
【发布时间】:2013-01-08 21:50:40
【问题描述】:

我正在尝试将 3D 数组乘以 1D 数组,这样沿第 3(深度:d)维度的每个 2D 数组的计算方式如下:

1D_array[d]*2D_array

我最终得到了一个看起来像这样的数组:

[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]

这将是正确地将 np.ones((3,2,2)) 与 [1,2,3] 相乘的结果。

我已经尝试了一段时间,无论我做什么我都无法得到这个结果,只是主题的变化。我该如何正确地执行此操作?

感谢您的帮助。

【问题讨论】:

  • 如果你的数组是ab,你在找b[:, None] * a吗?
  • 我刚试过b=np.ones((3,2,2)) a=np.array(range(-1,2)) ans=b[:, None]*a 但它抛出了一个错误:ValueError: operands could not be broadcast together with shapes (1,3) (3,2,2) 我确定我只是在做一些愚蠢的事情?
  • 在这种情况下,我想你想要a[:, None, None] * b
  • 您要求“沿第三维堆叠的二维数组”,但您的示例将它们沿第一维堆叠。
  • @Alok,您可以发表您的评论作为答案,因为它解决了问题...

标签: python arrays numpy multidimensional-array array-broadcasting


【解决方案1】:

假设b=np.ones((3,2,2))a=np.array([1,2,3])。我真的很喜欢@Alok 的答案,它使用了简单的a[:, None, None] * b,它肯定可以解决您的问题。我不喜欢这个公式的地方在于它是特定维度的。我的意思是它只能与 3 维数组一起使用,这在我的问题中并非如此,其中 b 可以是与 axis 0 具有完全相同长度的 1D 或 3D 数组。因此,我找到了一种方法来解决我的问题:

broad_a = np.broadcast_to(a, b.T.shape).T
result = broad_a * b
print(result)
[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]

还为您的案例提供预期结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 2020-04-22
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多