考虑以下数组
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)
。
有什么建议吗?
答案 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