使用同一数组的每个其他元素减去1D numpy数组的每个元素

时间:2017-03-21 18:47:48

标签: python arrays numpy matrix

考虑以下数组

np.array([a,b,c]) #where a,b and c are some integers

我要做这样的事情

[(a-b),(a-c),(b-c)] #basically subtract each element in the array with every other element except for itself

这有点像矩阵,但不需要像(a-a)或重复实例那样基本上就像(b - a) or (c - b)反向(a - b) and (a - c)

如果这是一个产品,有一些可以使用的功能,如np.kron,但如何处理这样的非产品操作?

我最接近的是:

(a[0] - np.choose([1,2],a))

这基本上给了我(a-b)(a - c),但仍然是(b - c)。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

使用triu_indices / tril_indices获取这些成对的索引,然后简单地索引和减去。因此,实施将是 -

r,c = np.triu_indices(a.size,1) # Input array : a
out = a[r] - a[c]

示例运行 -

In [159]: a = np.array([3,5,6])

In [160]: r,c = np.triu_indices(a.size,1)

In [161]: a[r] - a[c]
Out[161]: array([-2, -3, -1])

In [162]: a[0] - a[1]
Out[162]: -2

In [163]: a[0] - a[2]
Out[163]: -3

In [164]: a[1] - a[2]
Out[164]: -1