2015-01-20 3 views
0

У меня есть серия карт с двумя разными индексами, i и j. Пусть это индексируется как map_series [i] [j].применение масляной маски к массиву карт

EDIT 1/21: Минимальный рабочий пример будет что-то вроде map_series=np.array([np.array([np.arange(12) + 0.1*(i+1) + 0.01*(j+1) for j in range(3)]) for i in range(5)])

Я хотел бы применить ту же маску для каждого из них; если map_series является одномерным, каждый из них работает.

Я могу представить себе несколько различных способов применения этих карт:

(A) Применяя маску для всего массива:

map_series_ma = hp.ma(map_series) 
map_series_ma.mask = predefined_mask 

(B1) Применяя маску к каждому элементу массива :

map_series_ma = np.zeros_like(map_series) 
for i in range(len(map_series)): 
    for j in range(len(map_series[0])): 
     temp = hp.ma(map_series[i][j]) 
     temp.mask = predefined_mask 
     map_series_ma[i][j] = temp 

(В2) Применяя маску к каждому элементу массива:

map_series_ma = np.zeros_like(map_series) 
for i in range(len(map_series)): 
    for j in range(len(map_series[0])): 
     map_series_ma[i][j] = hp.ma(map_series[i][j]) 
     map_series_ma[i][j].mask = predefined_mask 

(C) Pythonically перечисляя список:

map_series_ma = np.array([hp.ma(map_series[i][j]) for j in range(j_max) for i in range(i_max)]) 
map_series_ma.mask = predetermined_mask 

Все они не дают нужный мне выход, однако.

При попытке (A) или (C) Я получаю сообщение об ошибке после первого шага, сообщая мне TypeError: плохое количество пикселей.

При попытке (B1) я не получаю сообщение об ошибке, но у меня также нет элементов maps_series_ma, которые имеют маски; на самом деле они даже не являются объектами hp.ma. Как ни странно, хотя: когда я возвращаю темп, делает, имеет соответствующую маску.

При попытке (B2) я получаю ошибку AttributeError: «numpy.ndarray» объект не имеет атрибута «маска»

Я (который, посмотрев на мой синтаксис, я полностью понимаю!) немного запутался, как это сделать. Оба (A) и (B1), кажется приемлемым для меня ...

Любая помощь очень ценится, Спасибо, Сэм

+0

вы можете предоставить игрушку например, играть? –

ответ

0

это работает для меня:

import numpy as np 
import healpy as hp 

map_series=np.array([np.array([np.arange(12) + 0.1*(i+1) + 0.01*(j+1) for j in range(3)]) for i in range(5)]) 
map_series_ma = map(lambda x: hp.ma(x), map_series) 
pm=[True, True,True,True,True,True,False,False,False,False,False,False] 
for m in map_series_ma: 
    for mm in m: 
     mm.mask=pm 
+0

Спасибо, что возродили это с ответом! – user1451632