为什么numpy的angle函数对于遮蔽数组值也返回值?

5
如果您尝试以下代码段:
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页面的问题#1中被列为“缺失的功能(正在进行中)”:http://projects.scipy.org/numpy/wiki/MaskedArray

问题在于许多一元函数,如np.anglenp.quantile在源代码中调用[np.]asarray,它会去除掉掩码。

正如开发人员在我链接到的页面中所解释的那样,如果这些函数使用ma.asarray而不是np.asarray,则可以运行,但它们没有 :(。

我猜这是一个补丁,尚未提交?

作为一个临时解决办法,np.angle基本上调用np.arctan2(a.imag,a.real)(可选地,乘以180/pi转换为度数),所以你可以使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接