为什么numpy angle函数对掩码数组值也返回结果
如果你尝试下面这段代码
import numpy as np
import numpy.ma as ma
a = np.random.random(100) + 1j*np.random.random(100)
mask = np.ones_like(a, dtype='bool')
mask[0:9] = False
a = ma.masked_array(a, mask)
phase = np.angle(a)
那么这个相位数组不会被遮罩。角度函数会对整个数组返回值,即使是那些被遮罩掉的值。请问我是不是做错了什么,还是说这样就是正常的?如果是这样的话,为什么会这样呢?
1 个回答
3
我简单看了一下numpy的源代码,可能这是个bug,或者说还没有实现。
在numpy.ma页面上,它被标记为“缺失功能(正在开发中)”,这是第一个问题:http://projects.scipy.org/numpy/wiki/MaskedArray。
问题在于一些单一函数,比如 np.angle
和 np.quantile
在源代码中调用了 [np.]asarray
,这会把掩码去掉。
正如开发者在我链接的页面上解释的那样,如果这些函数使用 ma.asarray
而不是 np.asarray
,它们就能正常工作,但实际上并没有这样做 :(。
我猜这可能是一个还没提交的修复吧?
作为一个临时解决办法,np.angle
实际上是调用了 np.arctan2(a.imag,a.real)
(可以选择乘以180/pi来转换成度数),所以你可以用这个方法。