我有两个大小不同的Numpy数组A(n x 1)和B(m x 1)。我想从A的所有元素中减去B的每个元素。因此,结果矩阵C(m x n)的元素应计算为c(i,j) = A(i)-B(j)
。是否有任何使用Numpy的直接无循环计算?
答案 0 :(得分:2)
您可以使用 np.meshgrid
A = np.array([1,2,3,4,5])
B = np.array([5,4,2,7])
a, b= np.meshgrid(A,B)
print(a - b)
#output:-
array([[-4, -3, -2, -1, 0],
[-3, -2, -1, 0, 1],
[-1, 0, 1, 2, 3],
[-6, -5, -4, -3, -2]])
第二种方法:-
C = A - np.array([B]).T
print(C)
#output:-
array([[-4, -3, -2, -1, 0],
[-3, -2, -1, 0, 1],
[-1, 0, 1, 2, 3],
[-6, -5, -4, -3, -2]])
答案 1 :(得分:1)
广播:
A = np.array([1,2,3,4,5])
B = np.array([5,4,2,7])
A - B[:, np.newaxis]
输出:
array([[-4, -3, -2, -1, 0],
[-3, -2, -1, 0, 1],
[-1, 0, 1, 2, 3],
[-6, -5, -4, -3, -2]])
答案 2 :(得分:0)
如果您使用列表推导,则可以比直接循环更有效率:
import numpy as np
a = np.array([10, 20, 30, 40])
b = np.array([1, 2])
c = np.array([a - b[j] for j in range(len(b))])
print(c)
输出:
[[ 9 19 29 39]
[ 8 18 28 38]]