为什么numpy在不断提高被零除遇到?

2024-04-18 07:00:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似w=[0.854,0,0.66,0.245,0,0,0,0]的数组,并希望对每个值应用100/sqrt(x)。因为我不能除以0,所以我用了这个技巧:

w=np.where(w==0,0,100/np.sqrt(w))

因为我没有除以0,所以我不应该有任何警告。 那为什么numpy一直在筹集资金呢?你知道吗


Tags: numpy警告技巧npsqrt数组where筹集资金
3条回答

您始终可以使用逻辑索引来计算它:

w = [0.854,0,0.66,0.245,0,0,0,0]
w = np.array(w)
w[w!=0] = 100 / np.sqrt(w[w!=0])

这样你就可以确保你不会被零除,也不会有任何警告或意外的行为。你知道吗

100/np.sqrt(w)仍然使用带零的w,因为函数参数是在执行函数之前计算的。零的平方根是零,所以你最后用一个包含零的数组除以100,这个数组又试图用这个数组的每个元素除以100,然后在某个点上用一个等于零的元素除以100。你知道吗

由于它利用了矢量化的优点,它将对w的每个元素执行100/np.sqrt(w),因此将发生被0除的情况,但是您不会获取与这些条目相关联的结果。所以基本上你的技巧仍然是被0除,但是不使用被0除的条目。你知道吗

相关问题 更多 >