[英]Quickest way to get the min and max from a list of lists of lists in Python?
假設我有以下列表:
x_train = [
[[0, 2, 5], [95, -5, 100]],
[[0, 97, 4], [12, 15, 18]]
]
我試圖找出最快的方法來獲取整個數組中三個數字列表中每個位置的最小值和最大值。 我的實際數據格式為5000000, 20, 3
所以我目前正在做的工作需要很長時間才能完成。
這是我的解決方案,大約需要16秒:
x_train = np.random.rand(1000000, 20, 3)
v_ego = min([inner[0] for outer in x_train for inner in outer])
v_lead = min([inner[1] for outer in x_train for inner in outer])
x_lead = min([inner[2] for outer in x_train for inner in outer])
有沒有一種更簡單,更快捷的方法,不需要每次我要查找下一個最小值或最大值時都遍歷整個數組?
在詢問之前應該做更多的研究,但是我剛剛發現了np.take
和np.amax
。
對於我的示例,這是我所做的:
index = 0
np.amin(np.take(x_train, indices=index, axis=2))
從現在的16秒變為現在的0.34!
在對輸入數組進行展平/整形之后,您將能夠一遍獲得所有列的最小值和最大值:
x_train = np.array([[[0, 2, 5], [95, -5, 100]], [[0, 97, 4], [12, 15, 18]]])
x_train = x_train.reshape((x_train.shape[0] * x_train.shape[1], 3))
all_mins = np.min(x_train, axis=0)
all_maxs = np.max(x_train, axis=0)
print(all_mins) # [ 0 -5 4]
print(all_maxs) # [ 95 97 100]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.