2016-07-22 49 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的操作要慢一些,但這個大小它不應該是一個問題。