如果您尝试以下代码段
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)
相位数组不会被屏蔽。 angle函数将返回整个数组的值,即使对于屏蔽的值也是如此。我在这里做错了什么或这是应该的方式?如果是这样,为什么?
答案 0 :(得分:3)
快速浏览一下numpy来源,它可能是一个bug /尚未实现。
它在numpy.ma页面上被列为“缺失功能(正在进行中)”,问题#1: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来获取度数),因此您可以使用它。