在python中将M*D矩阵广播到N*D矩阵(D大于1,M>;N)
我想从NXD矩阵中减去MXD矩阵的行(D大于1,M>N),而不使用Python中的任何for循环。e、 假设我想从20*25矩阵的行中减去100*25矩阵的行。如何在没有for循环的情况下编写代码(我知道我可以使用广播来编写代码,但似乎无法编写代码)。方法1:在python中将M*D矩阵广播到N*D矩阵(D大于1,M>;N),python,numpy,Python,Numpy,我想从NXD矩阵中减去MXD矩阵的行(D大于1,M>N),而不使用Python中的任何for循环。e、 假设我想从20*25矩阵的行中减去100*25矩阵的行。如何在没有for循环的情况下编写代码(我知道我可以使用广播来编写代码,但似乎无法编写代码)。方法1: def subtract(A, B): m = A.shape[0] n = B.shape[0] C = np.empty_like(A) for i in range(m // n):
def subtract(A, B):
m = A.shape[0]
n = B.shape[0]
C = np.empty_like(A)
for i in range(m // n):
C[i*n : (i+1)*n] = A[i*n : (i+1)*n] - B
return C
方法2:
def subtract(A, B):
m = A.shape[0]
n = B.shape[0]
return A - np.tile(B, (m // n, 1))
方法3:
def subtract(A, B):
B_ = np.repeat(B, 5).reshape(B.size, -1).T.reshape(-1, B.shape[1])
return A - B_
你不能用广播。您希望如何协调其中一行的100行与另一行的20行?广播不能处理这种差异。我想你可以平铺它,但手动循环5次可能更快。也许我无法解释。我想从20X25矩阵的每一行中减去100X25矩阵的每一行。e、 g.从20X25矩阵的第1行到第20行减去100X25矩阵的第1行,从20X25矩阵的第1行到第20行减去100X25矩阵的第2行,依此类推,直到第100行。您的解释如下:inconsistent@MateenUlhaq我很容易用两个循环完成,也能在一个循环中完成,但是对于一个项目,我不能用任何for循环。谢谢。所有这些工作。循环代码类似于方法1。