Czy otrzymujesz dane z pliku tekstowego lub podobnego? Jeśli tak, to proponuję przy użyciu funkcji genfromtxt
bezpośrednio określić wartość zamaskowanego:
In [149]: f = StringIO('0.0, 1.0, NA, 9.0')
In [150]: a = np.genfromtxt(f, delimiter=',', missing_values='NA', usemask=True)
In [151]: a
Out[151]:
masked_array(data = [0.0 1.0 -- 9.0],
mask = [False False True False],
fill_value = 1e+20)
Myślę, że problem w przykładzie jest to, że lista pyton używasz do zainicjowania tablicy numpy ma heterogenicznych typów (pływaki i sznur). Wartości są przekształcane na ciągi w tablicy numpy, ale funkcja masked_values
wykorzystuje równość punktów zmiennoprzecinkowych, co daje dziwne wyniki.
Oto jeden ze sposobów rozwiązania tego tworząc tablicę z obiektu dtype:
In [152]: d = np.array([0., 1., 'NA', 9.], dtype=object)
In [153]: e = ma.masked_values(d, 'NA')
In [154]: e
Out[154]:
masked_array(data = [0.0 1.0 -- 9.0],
mask = [False False True False],
fill_value = ?)
Może wolisz pierwsze rozwiązanie, ponieważ wynik ma dtype pływaka.
Chcę zachować brakującą wartość w mojej tablicy (w pamięci). Moim celem używania maski jest uśrednianie macierzy, ignorując brakujące wartości. Jak wskazano w ma dokumentach celem ma jest umożliwienie przetwarzania danych z brakującymi lub nieprawidłowymi wartościami. W prawdziwych seriach danych "NA", do oznaczania brakujących wartości stosowany jest "Brak" lub podobny. Czy opcja "fill_value" zapewnia jakiś sposób osiągnięcia mojego celu? –
@Dick: Tak, obie powyższe metody zapewniają to, czego potrzebujesz. Oboje zachowują informację, że brakuje elementu 3 (wartość fill_name nie jest tak ważna, jeśli o to ci chodzi). Na przykład możesz wywołać 'a.mean()' lub 'e.mean()' i zobaczyć, że wynikiem jest '3.33'. Bez względu na to, jaki znak/ciąg używa seria danych dla brakujących wartości, zamiast "NA" w powyższych przykładach można użyć. – ars