莫名其妙的妞妞楠进来了np.sqrt公司()或np.电弧()

2024-09-30 20:16:57 发布

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

我有两个数据集,data1和data2。我获取这些数据集并执行此操作:

Out=np.arctan(np.sqrt(data1/data2))

有三个元素in Out的值是nan,而实际上它们不应该是。我将这些nan元素的索引保存在一个名为nanind的列表中。所以:

^{pr2}$

现在我真的很困惑。在

np.arctan(np.sqrt(data1[nanind[0]]/data2[nanind[0]))
np.arctan(np.sqrt(data1[nanind[1]]/data2[nanind[1]))
np.arctan(np.sqrt(data1[nanind[2]]/data2[nanind[2]))

不要回南。它们按预期返回正浮点数。有人能解释一下吗,我真的需要摆脱nan元素吗?在

另外,我也试过一次做一个元素,形式是:

for i in range(data1.shape[0]):
    for j in range(data1.shape[1]):
        Out[i,j]=np.arctan(np.sqrt(data1[i,j]/data2[i,j]))

并且Out仍然具有与nan相同的三个元素。在


Tags: 数据in元素列表fornprangesqrt
1条回答
网友
1楼 · 发布于 2024-09-30 20:16:57

np.sqrt()为负输入返回NaN。在

>>> np.sqrt([-1,2,3])
array([        nan,  1.41421356,  1.73205081])

打错了类型,比如np.sqrt公司('hello'),它引发一个类型错误

如果数学上允许你的应用,你可以np.sqrt公司()通过传入复数将复数传递给下一步。这可以很简单地将0j添加到一个float中,如下所示:

^{pr2}$

否则,您应该测试np.sqrt公司使用np.isnan,可能与any组合,以便在数组上进行测试,并打印适当的警告或引发异常。在

>>> np.isnan(np.sqrt([-1,2,3]))
array([ True, False, False], dtype=bool)

>>> np.isnan(np.sqrt([-1,2,3])).any()
True

step = np.sqrt(inputArray)
if np.isnan(step).any():
    # do something to report the error
    badItems = np.where(np.isnan(step))
    print "bad inputs at :"+str(badItems)
    print "bad input values: "+str(inputArray[np.isnan(step)])
    raise Exception("unexpected nans in sqrt step")

这不是为永久性代码编写异常的最佳方法,但对于调试是有效的。要了解有关异常处理的详细信息,请参见Python Docs, Chapter 8: Errors and Exceptions

相关问题 更多 >