我可以这样说,假设我有一个 NumPy 数组,如下所示:
import numpy as np
x = np.array([1, 5, 4, 2, 3, 6, 7, 5, np.inf, np.inf, np.inf, 4, 2, 8, 3, 5, 9, 2, 3, 4])
从 i = 9
开始,我希望遍历每个元素,向 i = 0
移动,并记录沿途的“迄今为止最小值”数字以及这些数字的索引。在这个例子中:
left_val = []
left_idx = []
min_so_far = np.inf
for i in range(9, -1, -1):
if x[i] < min_so_far:
left_val.append(x[i])
left_idx.append(i)
min_so_far = x[i]
左侧的最小值为[5, 3, 2, 1]
,并且它们位于索引[7, 4, 3, 0]
处。
你也可以向右遍历:
right_val = []
right_idx = []
min_so_far = np.inf
for i in range(9, x.shape[0]):
if x[i] < min_so_far:
right_val.append(x[i])
right_idx.append(i)
min_so_far = x[i]
正确的最小值是 [4, 2]
,它们位于索引 [11, 12]
当 x
的长度很大时,有没有更快的方法来进行 min_so_far
搜索?