具有复杂数组的Python nan

2024-09-25 12:26:12 发布

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

在Python中将nan插入到复杂的numpy数组中会产生一些(对我来说)意外的行为:

a = np.array([5+6*1j])
print a
array([5.+6.j])

a[0] = np.nan
print a
array([nan+0.j])

我希望Python编写nan+nanj.进行分析,这通常并不重要,因为任何具有实部和/或虚部的复形的np.isnan都是真的。然而,我不知道它的行为,当我绘制数组的实部和虚部时,它给我的印象是我有关于虚部的信息(但是没有)。解决方法是写a[0] = np.nan + np.nan*1j。有人能解释一下这种行为的原因吗?在


Tags: numpy信息np绘制数组nanarray中将
2条回答

这可能与南的纽比形象有关:

NumPy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). This means that Not a Number is not equivalent to infinity.

本质上np.nanfloat。通过设置x[0] = np.nan,您将其值设置为“实”浮点(但不更改数组的dtype,这仍然很复杂),因此虚部保持不变,即0j。在

这也解释了为什么你可以通过做np.nan * 0j来改变虚部

这里的问题是,当您创建具有复杂值的数组时:

a = np.array([5+6*1j])

您已经创建了一个dtype复杂数组:

^{pr2}$

因此,通过添加一个只包含实部的值,它将被转换为一个复值,因此您将插入一个复数分量等于0j的数字,因此:

np.complex(np.nan)
# (nan+0j)

这解释了这种行为:

a[0] = np.array([np.nan])
print(a)    
# [nan+0.j]

相关问题 更多 >