合并掩码数组 - python
merging masked arrays - python
好的,我已经看到了与此类似的问题,并且一直在尝试应用多种方法。我不知道我做错了什么。
我有一个创建掩码数组的函数:
def masc(arr,z):
return(np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05)))
其中 arr 是三维数组,z 是任意值。
我正在努力在唯一的 z 上迭代它,但目前只是试验和错误 运行 具有两个不同 z 值的函数,并将两个掩码数组合并在一起。到目前为止,我的代码如下所示:
masked_array1_1 = masc(xyz,z1)
masked_array1_2 = masc(xyz,z2)
masked_1 = np.logical_and(masked_array1_1.mask,masked_array1_2.mask)
masked_array1 = np.ma.array(xyz,mask=masked_1)
我在代码行出现以下错误
masked_array1 = np.ma.array(xyz,mask = masked_1)
掩码和数据不兼容:数据大小为 703125,掩码大小为 234375。
我个人觉得错误很明显,但我的 python 眼睛看不到。让我知道是否需要提供示例数组。
首先我想def masc
应该是这样吧?
def masc(arr,z):
return np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05), arr[:,:,2])
现在回到您的问题:这是因为您在 def masc
中有 arr[:,:,2]
(而不仅仅是 arr
)。假设 xyz
的形状为 (nx, ny, nz)
,那么 masc
返回的函数的形状为 (nx, ny)
。这与 xyz
的形状不同。您现在可以设置 masked_array1 = np.ma.array(xyz[:,:,2],mask=masked_1)
或从任何地方完全删除 [:,:,2]
。
好的,我已经看到了与此类似的问题,并且一直在尝试应用多种方法。我不知道我做错了什么。
我有一个创建掩码数组的函数:
def masc(arr,z):
return(np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05)))
其中 arr 是三维数组,z 是任意值。
我正在努力在唯一的 z 上迭代它,但目前只是试验和错误 运行 具有两个不同 z 值的函数,并将两个掩码数组合并在一起。到目前为止,我的代码如下所示:
masked_array1_1 = masc(xyz,z1)
masked_array1_2 = masc(xyz,z2)
masked_1 = np.logical_and(masked_array1_1.mask,masked_array1_2.mask)
masked_array1 = np.ma.array(xyz,mask=masked_1)
我在代码行出现以下错误
masked_array1 = np.ma.array(xyz,mask = masked_1)
掩码和数据不兼容:数据大小为 703125,掩码大小为 234375。
我个人觉得错误很明显,但我的 python 眼睛看不到。让我知道是否需要提供示例数组。
首先我想def masc
应该是这样吧?
def masc(arr,z):
return np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05), arr[:,:,2])
现在回到您的问题:这是因为您在 def masc
中有 arr[:,:,2]
(而不仅仅是 arr
)。假设 xyz
的形状为 (nx, ny, nz)
,那么 masc
返回的函数的形状为 (nx, ny)
。这与 xyz
的形状不同。您现在可以设置 masked_array1 = np.ma.array(xyz[:,:,2],mask=masked_1)
或从任何地方完全删除 [:,:,2]
。