如何从另一个数组中减去一个数组的每个元素?

时间:2019-07-19 14:29:28

标签: python numpy

我有两个大小不同的Numpy数组A(n x 1)和B(m x 1)。我想从A的所有元素中减去B的每个元素。因此,结果矩阵C(m x n)的元素应计算为c(i,j) = A(i)-B(j)。是否有任何使用Numpy的直接无循环计算?

3 个答案:

答案 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]]
相关问题