具有复杂数组的Python楠

时间:2019-02-06 14:44:49

标签: python numpy nan complex-numbers

将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。有人可以向我解释这种行为的原因吗?

2 个答案:

答案 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.nanfloat。通过设置x[0] = np.nan,可以将其值设置为“实数”浮点数(但不更改数组的dtype,后者仍然很复杂),因此虚部保持不变,为0j

这也解释了为什么您可以通过执行np.nan * 0j

来更改虚部