У меня есть серия карт с двумя разными индексами, 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), кажется приемлемым для меня ...
Любая помощь очень ценится, Спасибо, Сэм
вы можете предоставить игрушку например, играть? –