繁体   English   中英

从Python中的列表列表中获取最小值和最大值的最快方法?

[英]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.takenp.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM