假設我有一個陣列(元素也可以是浮點數):
D = np.array([0,0,600,160,0,1200,1800,0,1800,900,900,300,1400,1500,320,0,0,250])
目標是從陣列的開頭開始,找到最大值(如果有幾個相等的,則為最后一個)并切割陣列的前部。然后連續重復此程序直到陣列結束。所以,預期的結果是:
[[0,0,600,160,0,1200,1800,0,1800],
[900,900,300,1400,1500],
[320],
[0,0,250]]
我設法找到了最后一個最大值:
D_rev = D[::-1]
last_max_index = len(D_rev) - np.argmax(D_rev) - 1
即我可以獲得所需答案的第一個子陣列。然后我可以使用回圈來獲取其余部分。
我的問題是,是否有一種不回圈的 numpy 方法?
uj5u.com熱心網友回復:
IIUC,您可以取accumulateD 的反向累積最大值(參見 )來形成組,然后拆分為itertools.groupby:
D = np.array([0,0,600,160,0,1200,1800,0,1800,900,900,300,1400,1500,320,0,0,250])
groups = np.maximum.accumulate(D[::-1])[::-1]
# array([1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1500, 1500,
# 1500, 1500, 1500, 320, 250, 250, 250])
from itertools import groupby
out = [list(list(zip(*g))[0]) for _, g in groupby(zip(D, groups), lambda x: x[1])]
# [[0, 0, 600, 160, 0, 1200, 1800, 0, 1800],
# [900, 900, 300, 1400, 1500],
# [320],
# [0, 0, 250]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436245.html
