2016-06-16 2 views
1

이 두 모델은 매우 유사하므로 하나는 다른 모델에서 작동해야합니다. 그렇다면 최대 누적량은 누적되지만 누적 금액은 누적되지 않는 이유는 무엇입니까?numpy.maximum은 누적되는데 numpy.argmax는 누적되지 않는 이유

EDIT : 자연스러운 후속 질문은 효율적인 argmax를 만드는 방법이 가장 비단뱀/수줍음 같은 방식으로 어떻게 축적 될까요? max 때문에

+0

당신은'maximum.accumulate'에서 점프를 찾을 수있는 점프에 대한 찾고'argmax'을 만들 수를 정렬. – hpaulj

답변

1

는 연관이지만, argmax이되지 않습니다 :

  • max(a, max(b, c)) == max(max(a, b), c)
  • argmax(a, argmax(b, c)) != argmax(argmax(a, b), c)
+0

확인. 나는 당신이 의미하는 것을 본다. .. 흠 ... 그것이이 ufuncs가 어떻게 작동하는지에 관해 몰랐다. .. – RAY

+0

나의 마음에서,이 argmax가 쌓이는 길은 현재/최후가 무엇인지를 추적하는 것에 의해 쉽게 일할 수 있었다. ,하지만 당신은 "마지막 맥스"가 지금까지 최대 값 이었지만 argmax는 그렇지 않다는 차이가 있다는 것을 머리에 못을 박았습니다. – RAY

+1

부수적으로,'np.argmax'는'np.max'와 함께 ufunc가 아닙니다. 'np.argmaximum'이 없다는 것은 더 철자가 맞습니다'<' – Eric

1

이 원하는 축적 argmax의 종류인가?

샘플 배열 :

In [135]: a 
Out[135]: array([4, 6, 5, 1, 4, 4, 2, 0, 8, 4]) 

당신이 이미 가지고 최대 :

In [136]: am=np.maximum.accumulate(a)  
In [137]: am 
Out[137]: array([4, 6, 6, 6, 6, 6, 6, 6, 8, 8], dtype=int32) 

In [138]: a1=np.zeros_like(a) 

am이 뛰어 요소를 식별합니다. np.diff은 일한 것 : ind을 찾을 수의

In [139]: ind=np.nonzero(a==am)[0] 

In [140]: ind 
Out[140]: array([0, 1, 8], dtype=int32) 

In [141]: a1[ind]=ind  
In [142]: a1 
Out[142]: array([0, 1, 0, 0, 0, 0, 0, 0, 8, 0]) 

In [143]: np.maximum.accumulate(a1) 
Out[143]: array([0, 1, 1, 1, 1, 1, 1, 1, 8, 8], dtype=int32) 

다른 방법 - am

In [149]: ind=np.nonzero(np.diff(am)) 

In [150]: ind = np.concatenate([[0],ind[0]+1]) 

In [151]: ind 
Out[151]: array([0, 1, 8]) 
관련 문제