将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
包含实部和/或虚部的任何复合物均为True。但是,我不知道其行为,在绘制数组的实部和虚部时,给我的印象是我了解虚部的信息(但是没有)。一种解决方法是编写a[0] = np.nan + np.nan*1j
。有人可以向我解释这种行为的原因吗?
答案 0 :(得分:0)
这里的问题是当您创建具有复杂值的数组时:
a = np.array([5+6*1j])
您已经创建了dtype
个复杂数组:
a.dtype
# dtype('complex128')
因此,通过添加仅包含实部的值,它将被转换为复数,因此您将插入一个复数等于0j
的数字,因此:
np.complex(np.nan)
# (nan+0j)
哪个会解释这种行为:
a[0] = np.array([np.nan])
print(a)
# [nan+0.j]
答案 1 :(得分:0)
它可能与nan的numpy表示有关:
NumPy将IEEE标准用于算术二进制浮点 (IEEE 754)。这意味着“非数字”不等于 无限。
基本上np.nan
是float
。通过设置x[0] = np.nan
,可以将其值设置为“实数”浮点数(但不更改数组的dtype
,后者仍然很复杂),因此虚部保持不变,为0j
。
这也解释了为什么您可以通过执行np.nan * 0j