gpt4 book ai didi

python - Numpy 除以 0 解决方法

转载 作者:太空狗 更新时间:2023-10-30 00:47:26 50 4
gpt4 key购买 nike

假设我有两个数组

x = [1,2,3]
y = [0,1,0]

我需要按元素划分数组,因此使用 numpy。我的问题是实现的“安全部门”。做的时候:

np.divide(x,y).tolist()

我得到输出:

[0.0, 2.0, 0.0]

我的问题是我需要它在除以 0 时返回不为 0 的元素,从而产生理想的输出:

[1.0, 2.0, 3.0]

使用 numpy 是否有解决方法?手动定义一个函数来执行此操作,是否有任何优化的方法来执行此操作,而无需制作自定义除法函数(如下所示)并在每对元素上使用它?

def mydiv(x, y):
if y == 0:
return x
else:
return x / y

注意:我担心优化的原因是它会在云中运行,因此资源有限,当有 300 多个元素数组时,这样做似乎根本不是最佳选择。

最佳答案

您可以使用的一个简单技巧:

x / (y + (y==0))

在行动中:

x = np.array([1, 5, 3, 7])
y = np.array([0, 2, 0, 4])

print(x / (y + (y==0)))

# [1. 2.5 3. 1.75]

时间:

def chrisz(x, y):
return x/(y+(y==0))

def coldspeed1(x, y):
m = y != 0
x[m] /= y[m]
return x

def coldspeed2(x, y):
m = ~(y == 0)
x[m] /= y[m]
return x

def coldspeed3(x, y):
m = np.flatnonzero(y)
x[m] /= y[m]
return x

结果:

In [33]: x = np.random.randint(10, size=10000).astype(float)

In [34]: y = np.random.randint(3, size=10000).astype(float)

In [35]: %timeit chrisz(x, y)
29.4 µs ± 601 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [36]: %timeit coldspeed1(x, y)
173 µs ± 2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [37]: %timeit coldspeed2(x, y)
184 µs ± 1.36 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [38]: %timeit coldspeed3(x, y)
179 µs ± 2.68 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

关于python - Numpy 除以 0 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50318322/

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