如果我有一个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]
我应该如何处理这个问题
这略有不同,但不如“疯狂物理学家”的回答那么优雅。这使用广播来获得差异
numpy
在每个元素上,都要减去后面的元素。 您可以使用^{} 获取此项的索引。剩下的只是减法:
triu_indices
的第二个参数向上移动一条对角线。默认值为0,其中包括主对角线的索引:如果需要按} :
b
而不是a
排序的输入,请使用^{itertools
您可以使用^{} 完成相同的任务:
如果需要,将结果包装在数组中
相关问题 更多 >
编程相关推荐