2016-07-22 102 views
0

我有2个二维阵列,其中,每一行代表一个时间和每一列表示一个项目。我想找出每个项目的两个数组之间的最大差异。 (我并不特别在意时间最大的不同是在这一点上找到这里。)显示阵列之间最大差值为列表

我想创建的这些最大差异的列表,以便以后我可以找到该名单的最大的15家。

到目前为止,我已经尝试做这个事情来完成这项任务:

import numpy as np 

array1 = [[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [3, 6, 9, 12, 15]] 
array2 = [[6, 7, 8, 9, 10], [11, 22, 33, 44, 55], [1, 4, 9, 16, 25]] 

num_items = np.shape(array1)[1] 
num_timesteps = np.shape(array1)[0] 

for counter in np.arange(0, num_items): 
    for counter2 in np.arange(0, num_timesteps): 
     diff_list = [] 
     diff = array1[counter2][counter] - array2[counter2][counter] 
     diff = abs(diff) 
     diff_list.append(diff) 
    max_diff = [] 
    max_diff.append(max(diff_list)) 
    print max_diff 

然而,这不打印实际列表。相反,它给了我一个项目列表,每个项目有最大的差异。

希望的输出:[2,2,0,4,10]

电流输出:[2] [2] [0] [4] [10]

所以,我的问题是:我怎样才能找到我的两个数组之间的最大差异,并将它们放在一个列表中?

+1

我不知道我理解你想要的输出,你可以为您的数据提供期望的输出? –

+0

使用'abs(np.subtract(array1,array2))'。函数'abs()'用于避免负数 – DavidG

回答

1

你需要为了得到你需要的输出移动max_diff = []以外的for循环。这将导致下面的代码:

import numpy as np 

array1 = [[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [3, 6, 9, 12, 15]] 
array2 = [[6, 7, 8, 9, 10], [11, 22, 33, 44, 55], [1, 4, 9, 16, 25]] 

num_items = np.shape(array1)[1] 
num_timesteps = np.shape(array1)[0] 
max_diff= [] #moves this outside of the for loop 
for counter in np.arange(0, num_items): 
    for counter2 in np.arange(0, num_timesteps): 
     diff_list = [] 
     diff = array1[counter2][counter] - array2[counter2][counter] 
     diff = abs(diff) 
     diff_list.append(diff) 

    max_diff.append(max(diff_list)) 
    print (max_diff) 

输出:2,2,0,4,10]

+0

当我将print语句移出for循环时,它的工作方式与我想要的完全一样。非常感谢! – evtoh

1

如何使用np.subtract你错过了,而你创建循环迭代器使用numpy的点。

不是100%肯定,如果这个工程,因为我没有numpy的安装做,但这里的代码:

import numpy as np 

array1 = [[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [3, 6, 9, 12, 15]] 
array2 = [[6, 7, 8, 9, 10], [11, 22, 33, 44, 55], [1, 4, 9, 16, 25]] 
array1, array2 = np.asarray(array1), np.asarray(array2) 

diff = np.subtrat(array1, array2) 
diff = np.absolute(diff) 

print diff.max() 
+0

甚至只是'''diff = a-b; result = diff.max(0),np.absolute(result,result)''' – wwii

1

随着列表理解中,你可以这样做:

a=[abs(b-c) for x,y in zip(array1,array2) for b,c in zip(x,y)] 

输出:5 ,5,5,5,5,9,18,27,36,45,2,2,0,4,10]

编辑:你只是想要最后一个,这样:

a=[abs(x-y) for x,y in zip(array1[2],array2[2])] 

输出:[2,2,0,4,10]

这比numpy的操作要慢一些,但这个大小它不应该是一个问题。