gpt4 book ai didi

python - 在指定范围内查找系列中两个数字的索引的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:37 25 4
gpt4 key购买 nike

我有一个数字列表(按递增顺序排列,不重复),我想编写一个算法来快速返回列表中两个元素的索引,这两个元素的差异在指定范围内。

这可能是多对索引,但我的目的是调整范围以使其足够小以仅捕获一两个,然后根据索引进行一些决策。

我目前正在使用 Python(实际上是 Pandas 系列)按以下方式实现:

  • 遍历系列中的所有元素
  • 从系列中减去该元素
  • 使用条件语句 ( np.where((list >= min) & (list < min + tol)) ) 返回我感兴趣的索引

由于我已经在减法和条件语句中使用 Pandas 向量化运算,我认为这也应该是一种向量化循环部分的方法。

编辑:添加了当前的实现和数据示例:

gmin = np.inf
for t in range(run.shape[0] - 1):
diffs = run - run.ix[run.index[t]] + run.ix[run.index[0]]
vals = np.where((diffs >= dis) & (diffs < dis + tol))
if vals[0].shape[0] > 0:
mint = np.min(vals)
time = diffs.index[mint] - diffs.index[t]
if time < gmin:
gmin = time

还有什么Pandas系列run看起来像:

run.head()
Out[6]:
0.000 0.030800
1.000 0.034410
2.000 0.038020
3.001 0.041634
4.001 0.045244
Name: DISTANCE, dtype: float64

最佳答案

如果你的数据集不是太大,可以使用numpy的substract.outer:

s = pd.Series(np.random.rand(1000)).cumsum()
diffs = np.subtract.outer(s, s)

这会生成一个矩阵,其中包含您系列中的所有成对差异(您实际上只对下三角感兴趣)。

然后您可以像以前一样应用 np.where 来查找满足条件的索引:

min = 0.1
tol = 0.05
where = np.where((diffs >= min) & (diffs < min + tol))

关于python - 在指定范围内查找系列中两个数字的索引的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33370676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com