2
我有一個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'變量的名字。 – 2013-02-10 18:42:08
只是有一個想法:作爲一種選擇,你可以通過使用'aplus = np.amax(np.cumsum(a,axis = 0),axis = 0)'和'aminus = np .amax(np.cumsum(-1 * a,axis = 0),axis = 0)',每個點取較大的數值,然後翻轉來自'aminus'的那些值的符號?但是這變得混亂 - Avaris的解決方案已經足夠乾淨和快速了。 – 2013-02-10 19:00:11