Python 如何使用两个二维数组来形成一个三维数组,而不使用numpy中的循环?
设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,就像在这个代码示例中一样Python 如何使用两个二维数组来形成一个三维数组,而不使用numpy中的循环?,python,arrays,numpy,Python,Arrays,Numpy,设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(
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")
有没有矢量化的方法可以做到这一点而不需要使用循环,这样代码可以运行得更快
非常感谢您的帮助:)这就是所谓的广播,通过
B
转换:
C = A[:,:,None] - B.T[None,:,:]
C.shape
输出
(10, 8, 3)
使用
A[…,无]-B.T