Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用两个二维数组来形成一个三维数组,而不使用numpy中的循环?_Python_Arrays_Numpy - Fatal编程技术网

Python 如何使用两个二维数组来形成一个三维数组,而不使用numpy中的循环?

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(

设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")
有没有矢量化的方法可以做到这一点而不需要使用循环,这样代码可以运行得更快


非常感谢您的帮助:)

这就是所谓的广播,通过
B
转换:

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

C.shape
输出

(10, 8, 3)

使用
A[…,无]-B.T