gpt4 book ai didi

python - Numpy:根据条件在位置有效地乘以数组

转载 作者:行者123 更新时间:2023-12-03 21:40:38 24 4
gpt4 key购买 nike

我有以下四个形状相同的数组:

a = np.array([12, 6, 7])
b = np.array([2, 3, 3])
c = np.array([5, 4, 9])
d = np.array([15, 22, 28])
只要条件 num > 20满足 d 中的每个元素,我要乘 a来自 b并替换 c 中的值与该乘法的个别结果。所以, c将等于 [5, 18, 21] .
我的尝试:
c[d > 20] = a[d > 20] * b[d > 20]
有什么方法可以更有效地为大型阵列实现这一点?

最佳答案

表达式,c[d > 20] = a[d > 20] * b[d > 20]正在计算 d > 20 的结果三次。你可以通过这样做来改进

mask = d > 20
c[mask] = a[mask] * b[mask]
要进一步改进,您可以使用 np.multiply 的事实。是 ufunc .这意味着它有一个 where 确定在不创建任何临时数组的情况下实际进行计算的位置的选项,以及 out 放置输出的选项:
np.multiply(a, b, where=d > 20, out=c)
快速 timeit表明第二个选项确实快了大约 2.5 倍(至少在我的机器上):
a = np.random.randint(50, size=10000)
b = np.random.randint(50, size=10000)
c = np.random.randint(50, size=10000)
d = np.random.randint(50, size=10000)

%%timeit
m = d > 20
c[m] = a[m] * b[m]
172 µs ± 460 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit np.multiply(a, b, where=d > 20, out=c)
66.4 µs ± 219 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
这里还有一个更重要的教训是,这个特定的操作几乎肯定不会成为你的瓶颈。

关于python - Numpy:根据条件在位置有效地乘以数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67976099/

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