【问题标题】:applying healpy mask to array of maps将 healpy 蒙版应用于地图数组
【发布时间】:2015-01-20 20:02:09
【问题描述】:

我有一系列具有两个不同索引 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

(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) 时,我在第一步后得到一个错误,告诉我 TypeError: bad number of pixel.

在尝试 (B1) 时,我没有收到错误,但我也没有 maps_series_ma 的元素有掩码;事实上,它们甚至看起来都不是 hp.ma 对象。不过奇怪的是:当我返回 temp 时,它确实有适当的掩码。

在尝试 (B2) 时出现错误 AttributeError: 'numpy.ndarray' object has no attribute 'mask' (看了我的语法后,我完全明白了!)

我有点困惑如何解决这个问题。 (A) 和 (B1) 对我来说似乎都可以接受...

非常感谢任何帮助, 谢谢, 山姆

【问题讨论】:

  • 你能提供一个玩具例子吗?

标签: python arrays mask healpy


【解决方案1】:

这对我有用:

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

【讨论】:

  • 感谢您回复这个问题!
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2012-12-09
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多