Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么numpy在不断提高被零除的情况下会遇到?_Python_Numpy_Where Clause - Fatal编程技术网

Python 为什么numpy在不断提高被零除的情况下会遇到?

Python 为什么numpy在不断提高被零除的情况下会遇到?,python,numpy,where-clause,Python,Numpy,Where Clause,我有一个类似于w=[0.854,0,0.66,0.245,0,0,0,0]的数组,希望对每个值应用100/sqrt(x)。因为我不能除以0,所以我使用以下技巧: w=np.where(w==0,0100/np.sqrt(w)) 因为我没有除以0,所以我不应该有任何警告。 那么,为什么numpy不断提高运行时警告:在true_divide中遇到被零除?100/np。sqrt(w)仍然使用带零的w,因为函数参数是在执行函数之前计算的。零的平方根是零,所以你最后用一个包含零的数组除以100,这个数组反

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

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

因为我没有除以0,所以我不应该有任何警告。
那么,为什么numpy不断提高运行时警告:在true_divide中遇到被零除?

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

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

第二个参数是错误的。您必须将其更改为
w
。博士


您始终可以使用逻辑索引进行计算:

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])

通过这种方式,您可以确保不会被零除,并且不会出现警告或意外行为。

这并不重要,因为
np.sqrt(w)
仍然包含零。这将得到完全相同的结果警告不是真正的问题,是吗?如果你想压制它,你可以先用
np.nan
替换所有的零。也许
w=np.asarray([0如果w_i==0否则100/np.sqrt(w_i)对于w_i in w])
更符合您的要求。是的,这不是一个真正的问题,我只是想了解:)
其中
是一个python函数。将对其参数进行求值,并传入结果数组。谢谢!非常清楚。但是,如果不关闭警告,我的解决方案是什么?@NanBlanc,您可以这样做:
result=100/np.sqrt(w);结果[np.isinf(结果)]=0
。你仍然会得到警告,很难,因为你无论如何都不能被零除,我明白了!请参阅我在ForceBru中的评论answer@NanBlanc,谢谢你:D
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])