2011-12-01 8 views
5

Si intenta el siguiente segmento de código¿Por qué los valores de retorno de función del ángulo numpy también para el conjunto de máscaras valores

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) 

no ser enmascarada La matriz de fase. La función de ángulo devolverá valores para toda la matriz, incluso para los valores enmascarados. ¿Estoy haciendo algo mal aquí o es así como debería ser? Si es así, ¿por qué?

Respuesta

3

Eché un rápido vistazo a la fuente numpy, y podría ser un error/aún no implementado.

Aparece como una "característica faltante (trabajo en progreso)" en la página numpy.ma, número 1: http://projects.scipy.org/numpy/wiki/MaskedArray.

El problema es que una serie de funciones únicas como np.angle, np.quantile llaman a [np.]asarray en la fuente, que quita la máscara.

Como los desarrolladores explican en la página he vinculado, si estas funciones utilizan ma.asarray lugar de np.asarray que iba a trabajar, pero no :(.

supongo que esto es un parche aún no se ha presentado ?

Como solución temporal, np.angle llama básicamente np.arctan2(a.imag,a.real) (opcionalmente multiplicando por 180/pi para obtener grados), lo que podría utilizar eso.

Cuestiones relacionadas