【问题标题】:Finding differences between all values in an List查找列表中所有值之间的差异
【发布时间】:2015-06-27 01:02:12
【问题描述】:

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

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

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

此时我一直找不到解决办法

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • 你想做什么???

标签: python arrays numpy


【解决方案1】:

你可以这样做:

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]

【讨论】:

    【解决方案2】:

    我相信您正在尝试做的是计算输入列表元素之间的绝对差异,但不包括 自身差异。因此,有了这个想法,这可能是一种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])
    

    【讨论】:

    • Nonenumpy.array( .. )[:,None] 进行切片是什么意思?
    • 哦,找到了!它是 numpy.newaxis 的别名 - 在这里回答 - stackoverflow.com/questions/29241056/… :它增加了向量的维度(这里,从 1D 到 2D)
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2011-01-24
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    相关资源
    最近更新 更多