我想找到numpy数组中所有值之间的差异,并将其附加到新列表中。
Example: a = [1,4,2,6]
result : newlist= [3,1,5,3,2,2,1,2,4,5,2,4]
,即对于每个值i of a
,确定列表其余部分的值之间的差异。
此时我一直无法找到解决方案
答案 0 :(得分:2)
你可以这样做:
a = [1,4,2,6]
newlist = [abs(i-j) for i in a for j in a if i != j]
输出:
print newlist
[3, 1, 5, 3, 2, 2, 1, 2, 4, 5, 2, 4]
答案 1 :(得分:1)
我相信你要做的是计算输入列表元素之间的绝对差异,但不包括自我差异。因此,有了这个想法,这可能是一种vectorized
方法,也称为array programming
-
# Input list
a = [1,4,2,6]
# Convert input list to a numpy array
arr = np.array(a)
# Calculate absolute differences between each element
# against all elements to give us a 2D array
sub_arr = np.abs(arr[:,None] - arr)
# Get diagonal indices for the 2D array
N = arr.size
rem_idx = np.arange(N)*(N+1)
# Remove the diagonal elements for the final output
out = np.delete(sub_arr,rem_idx)
示例运行以显示每个步骤的输出 -
In [60]: a
Out[60]: [1, 4, 2, 6]
In [61]: arr
Out[61]: array([1, 4, 2, 6])
In [62]: sub_arr
Out[62]:
array([[0, 3, 1, 5],
[3, 0, 2, 2],
[1, 2, 0, 4],
[5, 2, 4, 0]])
In [63]: rem_idx
Out[63]: array([ 0, 5, 10, 15])
In [64]: out
Out[64]: array([3, 1, 5, 3, 2, 2, 1, 2, 4, 5, 2, 4])