Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 掩模二维numpy阵列_Python_Arrays_Numpy - Fatal编程技术网

Python 掩模二维numpy阵列

Python 掩模二维numpy阵列,python,arrays,numpy,Python,Arrays,Numpy,我想在2D numpy数组上应用掩码。但它不能正常工作。如果我有 val(lat, lon) ---> my 2D array (20, 30) Mask_lat = np.ma.masked_array(lat, mask=latmask) ---> masked lat (5,) Mask_lon = np.ma.masked_array(lon, mask =lonmask) ---> masked lon (8,) Maks_val = np.ma.

我想在2D numpy数组上应用掩码。但它不能正常工作。如果我有

val(lat, lon)  ---> my 2D array (20, 30)


Mask_lat = np.ma.masked_array(lat, mask=latmask)  ---> masked lat (5,)


Mask_lon = np.ma.masked_array(lon, mask =lonmask)   ---> masked lon (8,)


Maks_val = np.ma.masked_array(val, mask=mask_lat_lon) ---> ?
我不知道如何通过正确的
mask\u lat\u lon
来屏蔽
val(5,8)
。如果有人能指引我,我将不胜感激


提前谢谢。

如果我正确理解了您的问题,您有两个1D数组,它们表示2D数组中的y和x(横向和纵向)位置。要基于二维阵列中的x/y位置遮罩区域

要理解的关键部分是二维阵列的遮罩也是二维的

例如,让我们屏蔽二维阵列的单个元素:

import numpy as np

z = np.arange(20).reshape(5, 4)
mask = np.zeros(z.shape, dtype=bool)

mask[3, 2] = True

print z
print np.ma.masked_array(z, mask)
这将产生:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 -- 15]
 [16 17 18 19]]
在本例中,需要使用两个1D x和y阵列创建二维遮罩。例如:

import numpy as np

x = np.linspace(-85, -78, 4)
y = np.linspace(32, 37, 5)
z = np.arange(20).reshape(5, 4)

xmask = (x > -82.6) & (x < -80)
ymask = (y > 33) & (y < 35.6)

print xmask
print ymask
使用
newaxis
(或
None
,它们是同一对象)进行切片时,会在该位置添加一个新轴,从而将1D阵列转换为2D阵列。如果您以前看到过这一点,那么快速查看一下
xmask[np.newaxis,:]
ymask[:,np.newaxis]
看起来像什么很有用:

In [14]: xmask
Out[14]: array([False, False,  True, False], dtype=bool)

In [15]: ymask
Out[15]: array([False,  True,  True, False, False], dtype=bool)

In [16]: xmask[np.newaxis, :]
Out[16]: array([[False, False,  True, False]], dtype=bool)

In [17]: ymask[:, np.newaxis]
Out[17]:
array([[False],
       [ True],
       [ True],
       [False],
       [False]], dtype=bool)
mask
将被屏蔽(请记住
True
元素被屏蔽):

最后,我们可以基于此掩码从
z
创建二维掩码数组:

arr = np.masked_array(z, mask)
这给了我们最终的结果:

 [[ 0  1  2  3]
  [ 4  5 --  7]
  [ 8  9 -- 11]
  [12 13 14 15]
  [16 17 18 19]]

我的第一个想法是
lonmask&latmask
,但我不清楚什么是
masked lat(5,)
我真的不明白你在问什么。你能给出一个具体的例子来展示你的输入和你想要的输出吗?我该如何改变逻辑,以便在组合两个一维掩模来创建二维掩模时,我可以在任何一个一维掩模为真的地方进行掩模。我有一个非常相似的问题,除了我想掩盖所有经度的某些纬度和所有纬度的某些经度。我有一个用于纬度的1D掩码和一个用于经度的1D掩码。@Will.Evo,要通过两个1D掩码有效地剪裁2D数组,请如上所示创建
mask
,然后
clipped_z=z[mask]
。这将创建一个1D数组,然后可以使用
clipped_z.reforme()
将其转换为2D。可以使用
np.sum(xmask)
np.sum(ymask)
获得适当的整形尺寸,它们计算
True
的数量。
arr = np.masked_array(z, mask)
 [[ 0  1  2  3]
  [ 4  5 --  7]
  [ 8  9 -- 11]
  [12 13 14 15]
  [16 17 18 19]]