将 healpy mask 应用于地图数组
applying healpy mask to array of maps
我有一系列具有两个不同索引 i 和 j 的地图。让它像 map_series[i][j].
这样被索引
编辑 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
(B2) 将掩码应用于数组的每个元素:
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) Python 枚举列表:
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) 时,我在第一步后收到错误消息,告诉我类型错误:像素数错误。
尝试 (B1) 时,我没有收到错误,但 maps_series_ma 的元素中 none 也有掩码;事实上,它们甚至看起来都不是 hp.ma 对象。不过,奇怪的是:当我 return 对它进行临时处理时 是否有合适的掩码。
尝试 (B2) 时出现错误
AttributeError: 'numpy.ndarray' object has no attribute 'mask' (在查看我的语法后,我完全理解了!)
我有点困惑如何去做这件事。 (A) 和 (B1) 我觉得都可以接受...
非常感谢任何帮助,
谢谢,
山姆
这对我有用:
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
我有一系列具有两个不同索引 i 和 j 的地图。让它像 map_series[i][j].
这样被索引编辑 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
(B2) 将掩码应用于数组的每个元素:
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) Python 枚举列表:
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) 时,我在第一步后收到错误消息,告诉我类型错误:像素数错误。
尝试 (B1) 时,我没有收到错误,但 maps_series_ma 的元素中 none 也有掩码;事实上,它们甚至看起来都不是 hp.ma 对象。不过,奇怪的是:当我 return 对它进行临时处理时 是否有合适的掩码。
尝试 (B2) 时出现错误 AttributeError: 'numpy.ndarray' object has no attribute 'mask' (在查看我的语法后,我完全理解了!)
我有点困惑如何去做这件事。 (A) 和 (B1) 我觉得都可以接受...
非常感谢任何帮助, 谢谢, 山姆
这对我有用:
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