나는 numpy 배열 a
, a.shape=(17,90,144)
을 가지고 있습니다. cumsum(a, axis=0)
의 각 열의 최대 크기를 찾고 싶지만 원래 기호는 그대로 유지하고 싶습니다. 즉, 주어진 열 a[:,j,i]
에 대해 가장 큰 크기 인 cumsum
이 음수 값에 해당하면 마이너스 기호를 유지하려고합니다.Numpy는 축을 따라 cumsum의 최대 크기를 부호로 붙였습니다.
코드 np.amax(np.abs(a.cumsum(axis=0)))
은 나에게 크기를 가져 오지만 표시를 유지하지 않습니다. 대신 np.argmax
을 사용하면 필자가 원하는 인덱스를 얻을 수 있으며 원래의 cumsum
어레이에 연결할 수 있습니다. 그러나 그렇게 할 수있는 좋은 방법을 찾을 수는 없습니다.
다음 코드는 작동하지만 정말 천천히 더러운이며 :
이max_mag_signed = np.zeros((90,144))
indices = np.argmax(np.abs(a.cumsum(axis=0)), axis=0)
for j in range(90):
for i in range(144):
max_mag_signed[j,i] = a.cumsum(axis=0)[indices[j,i],j,i]
깨끗하고,이 작업을 수행하는 빠른 방법이 있어야합니다. 어떤 아이디어?
감사합니다 - 엄청난 속도 향상을. 나는'np.indices' 함수에 익숙하지 않았습니다. 코드 가독성을 위해서 필자는'indices' 변수의 이름을 변경해야한다고 생각합니다. –
방금 생각 했었습니다 : 대안으로'aplus = np.amax (np.cumsum (a, axis = 0), axis = 0)'과'aminus = np '를 취함으로써 (의사 코드로) .amax (np.cumsum (-1 * a, axis = 0), axis = 0)', 각 점에서 더 큰 크기를 취한 다음 'aminus'에서 나온 값의 부호를 바꿉니 까? 그러나 이것은 지저분 해지고 있습니다. Avaris의 솔루션은 이미 충분히 깨끗하고 빠릅니다. –