【问题标题】:How do i use two 2 dimentional arrays to form a 3 dimentional one without using loops in numpy?如何在不使用 numpy 循环的情况下使用两个二维数组来形成一个 3 维数组?
【发布时间】:2019-09-10 21:59:44
【问题描述】:

让 A 和 B 是两个形状分别为 ( X , Y ) 和 ( Z , Y ) 的 numpy 数组。我需要一个形状为 ( X , Y , Z ) 的数组 C 其中,对于每个 x 、 y 和 z,C[ x , y , z ] = A[ x , y ] - B[ z , y ]。

我知道计算 C 的最快方法是从 A 的每一行中减去 B,就像在这个代码示例中一样。

import numpy

X , Y , Z = 10 , 8 , 3

A = numpy.random.rand( ( X , Y ) )
B = numpy.random.rand( ( Z , Y ) )
C = numpy.zeros( ( X , Y , Z ) )

for x in range( X ):
    C[ x ] = A[ x ] - B

print( A , B , C , sep = "\n\n")

有没有什么向量化的方式可以做到这一点而不需要使用循环,这样代码可以运行得更快?

感谢您的帮助:)

【问题讨论】:

  • 使用A[..., None] - B.T

标签: python arrays numpy


【解决方案1】:

这称为广播,B 已转换:

C = A[:,:,None] - B.T[None,:,:]

C.shape

输出

(10, 8, 3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2012-04-10
    • 2017-08-18
    • 2021-10-29
    相关资源
    最近更新 更多