gpt4 book ai didi

python - Numpy - 使用先前值的数组添加

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:06 25 4
gpt4 key购买 nike

这就是我编写代码的方式,其中“分钟”和“差事”是相同大小的列表(下面的示例)。

但是这些是两个 numpy 数组,所以这段代码不起作用。另一件事是我希望“完成”的结果也是一个 numpy 数组。

done = 0
for i in minute:
if done < minute:
done = minute + (errands * 2)
else:
done = done + (errands * 2)
print (done)

所以,我也尝试过使用“np.where”

import numpy as np
done = 0
done = np.where(done < minute, minute + (errands * 2), done + (errands * 2))
print(done)

这将是完美的,但这里的问题是它不会持续更新“完成”,以便在某个时候运行等效代码“done = done + (errands * 2)”(如果这有意义的话) ).

numpy 数组的一些小例子:

minute = np.array([2, 2, 5, 5, 6, 7, 9, 11, 15])

errands = np.array([1, 1, 1, 7, 2, 2, 1, 1, 1])

只是为了让我尽可能清楚,我希望“完成”的输出是

done = np.array([4, 6, 8, 22, 26, 30, 32, 34, 36])

预先感谢您的帮助。

最佳答案

由于更新,这是一个迭代问题。然而,它是 O(n),并且可以使用 numbanjit 高效地完成:

设置

from numba import njit

您可能需要pip install numba


@njit
def toggle(a, b):
done, out = 0, []
for i in range(len(a)):
if done < a[i]:
done = a[i] + (b[i] * 2)
else:
done = done + (b[i] * 2)
out.append(done)
return np.array(out)

toggle(minute, errands)

array([ 4,  6,  8, 22, 26, 30, 32, 34, 36], dtype=int64)

性能

minute = np.repeat(minute, 10000)
errands = np.repeat(errands, 10000)

%timeit toggle(minute, errands)
2.02 ms ± 9.84 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit toggle_no_njit(minute, errands)
64.4 ms ± 738 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - Numpy - 使用先前值的数组添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820665/

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