查找List中所有值之间的差异

时间:2015-04-20 10:39:40

标签: python arrays numpy

我想找到numpy数组中所有值之间的差异,并将其附加到新列表中。

Example: a = [1,4,2,6]
result : newlist= [3,1,5,3,2,2,1,2,4,5,2,4]

,即对于每个值i of a,确定列表其余部分的值之间的差异。

此时我一直无法找到解决方案

2 个答案:

答案 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])