Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 RuntimeWarning:在divide中遇到无效值_Python_Python 2.7_Matplotlib - Fatal编程技术网

Python RuntimeWarning:在divide中遇到无效值

Python RuntimeWarning:在divide中遇到无效值,python,python-2.7,matplotlib,Python,Python 2.7,Matplotlib,我必须使用Euler的方法为“弹簧中的球”模型制作一个程序 我不断地发现这个错误: a=-g+km*cos(tt)*(rr-L0)*r[i,:]/rr RuntimeWarning: invalid value encountered in divide 我想不出来,代码怎么了?你在除以rr,可能是0.0。检查rr是否为零,并采取合理措施,而不是在分母中使用它 我认为您的代码试图“除以零”或“除以NaN”。如果您意识到这一点,并且不想让它困扰您,那么您可以尝试: import numpy as

我必须使用Euler的方法为“弹簧中的球”模型制作一个程序

我不断地发现这个错误:

a=-g+km*cos(tt)*(rr-L0)*r[i,:]/rr
RuntimeWarning: invalid value encountered in divide

我想不出来,代码怎么了?

你在除以
rr
,可能是0.0。检查
rr
是否为零,并采取合理措施,而不是在分母中使用它

我认为您的代码试图“除以零”或“除以NaN”。如果您意识到这一点,并且不想让它困扰您,那么您可以尝试:

import numpy as np
np.seterr(divide='ignore', invalid='ignore')
有关更多详细信息,请参阅:


  • Python索引从0(而不是1)开始,因此赋值“r[1,:]=r0”定义了r的第二个(即索引1)元素,并将第一个(索引0)元素保留为一对零。for循环中i的第一个值是0,因此rr获取r中第一个条目与自身的点积的平方根(即0),然后在下一行中除以rr就会抛出错误。

    为了防止被零除,可以在发生div0错误时预初始化输出“out”,例如
    np。其中
    不会剪切它,因为不管条件如何,都会计算完整的行

    预初始化示例:

    a = np.arange(10).reshape(2,5)
    a[1,3] = 0
    print(a)    #[[0 1 2 3 4], [5 6 7 0 9]]
    a[0]/a[1]   # errors at 3/0
    out = np.ones( (5) )  #preinit
    np.divide(a[0],a[1], out=out, where=a[1]!=0) #only divide nonzeros else 1
    

    打印该行代码中每个较小项目中发生的情况。这是调试它的唯一方法。对于
    rr
    ,您有
    nan
    s,这会抛出该错误。
    rr
    的问题源于
    r[i,:]
    ,在某些情况下,它等于
    数组([nan,nan])
    。正如@cppleerner提到的,调试(或编写)代码的最佳方法是在实现之前测试每个较小的部分。将
    与NP.errstate(divide='ignore',invalid='ignore')一起使用可能会很有用:
    如果要抑制代码块的警告,为什么要忽略被零除或NaN除?@xsquared,前提是您自己正确处理了该值,并且正在将代码分发给用户(或者厌倦了看到警告)<使用np.errstate(…)可以仅为已处理的情况安全地执行此操作。@reve_etrange,我发现它比通常忽略除以零更可接受。最好在导致错误的行之前设置此值,然后在行之后通过命令
    np.seterr重置为正常状态
    'warn'
    (divide='warn',invalid='warn')
    a = np.arange(10).reshape(2,5)
    a[1,3] = 0
    print(a)    #[[0 1 2 3 4], [5 6 7 0 9]]
    a[0]/a[1]   # errors at 3/0
    out = np.ones( (5) )  #preinit
    np.divide(a[0],a[1], out=out, where=a[1]!=0) #only divide nonzeros else 1