假设我有此列表:
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])
是否有一种更简单,更快捷的方法,而无需每次我要查找下一个最小值或最大值时都遍历整个数组?
答案 0 :(得分:0)
在询问之前应该做更多的研究,但是我才发现np.take
和np.amax
。
以我的示例为例,这是我所做的:
index = 0
np.amin(np.take(x_train, indices=index, axis=2))
从现在的16秒现在需要0.34!
答案 1 :(得分:0)
对输入数组进行展平/整形后,您将能够一遍获得所有列的最小值和最大值:
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]