2016-07-22 1 views
0

2 개의 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를 사용하지 않을 수 있습니다.

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

목록 comprehention으로 당신이 할 수 있습니다 :

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

출력이 내가 NumPy와이 설치되어 있지 않기 때문에 작동하지만 여기에 코드의 경우

100 % 확인 [5 , 5, 5, 5, 5, 9, 18, 27, 36, 45, 2, 0, 4, 10]

편집 : 이렇게 마지막 하나

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

출력 [2, 2, 0, 4, 10]이 NumPy와 조작보다 약간 느리지 만

이 크기 대는 안된다 문제.