在python中将M*D矩阵广播到N*D矩阵(D大于1,M>;N)

在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):

我想从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):
        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。