如果我有一个4 int的数组
[a,b,c,d]
我想要每个元素与另一个元素之间的差异,结果看起来像这样:
[a-b, a-c, a-d,b-c,b-d,c-d]
符号确实很重要,我尝试移动数组,但是应该有更好的方法来做到这一点, 因为这似乎是我忘记的一些数学问题。
import numpy as np
array_1 = np.array([1,2,3,4])
array_2 = np.copy(array_1)
array_2 = np.roll(array_2,-1)
array_2[-1] = 0
array_3 = np.copy(array_2)
array_3 = np.roll(array_3,-1)
array_3[-1] = 0
result_1n2 = array_1-array_2
result_1n3 = array_1-array_3
result_last = array_1[0] - array_1[-1]
array_result = [result_1n2[0],result_1n3[0], result_last, result_1n2[1], result_1n3[1], result_1n2[2]]
print(array_result)
[-1, -2, -3, -1, -2, -1]
我应该如何处理?
答案 0 :(得分:6)
numpy
在每个元素上,您都希望减去其后的元素。
您可以使用np.trui_indices
获取该索引。其余只是减法:
a, b = np.triu_indices(4, 1)
result = array_1[a] - array_1[b]
triu_indices
的第二个参数将您向上移动一个对角线。默认值为0,其中包括主对角线的索引:
>>> a
array([0, 0, 0, 1, 1, 2], dtype=int64)
>>> b
array([1, 2, 3, 2, 3, 3], dtype=int64)
>>> array_1[a]
array([1, 1, 1, 2, 2, 3])
>>> array_1[b]
array([2, 3, 4, 3, 4, 4])
>>> result
array([-1, -2, -3, -1, -2, -1])
如果您需要按b
而不是a
排序的输入,请使用np.tril_indices
:
b, a = np.tril_indices(4, -1)
itertools
您可以使用itertools.combinations
完成同样的事情:
result = [a - b for a, b in itertools.combinations(array_1, 2)]
如果需要,将结果包装在数组中。
答案 1 :(得分:0)
这有点不同,但不如@ Mad-Physicist的回答优雅。这是通过广播来获取差异的。
.fitBounds([[-90, -180], [90, 180]]);