如何正确屏蔽numpy二维阵列?

2024-10-06 06:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个二维坐标数组,看起来像

x = array([[1,2],[2,3],[3,4]])

在我之前的工作中,我制作了一个面具,看起来像

mask = [False,False,True]

当我尝试在二维坐标向量上使用这个遮罩时,我得到一个错误

newX = np.ma.compressed(np.ma.masked_array(x,mask))

>>>numpy.ma.core.MaskError: Mask and data not compatible: data size 
   is 6, mask size is 3.`

我想这是有道理的。所以我试着用下面的面具代替:

mask2 = np.column_stack((mask,mask))
newX = np.ma.compressed(np.ma.masked_array(x,mask2))

我得到的是接近:

>>>array([1,2,2,3])

达到我的期望(和想要):

>>>array([[1,2],[2,3]])

一定有更简单的方法吗?


Tags: falsetruedatasizeisnpmask数组
2条回答

由于这些解决方案对我都不起作用,我想写下解决方案的作用,也许对其他人有用。我使用Python3.x,并且我在两个3D数组上工作。一个,我称之为data_3D包含大脑扫描中记录的浮点值,另一个,template_3D包含表示大脑区域的整数。我想从data_3D中选择那些值,它们对应于一个整数region_code,如template_3D

my_mask = np.in1d(template_3D, region_code).reshape(template_3D.shape)
data_3D_masked = data_3D[my_mask]

这给了我一个只有相关录音的一维数组。

这就是你要找的吗?

import numpy as np
x[~np.array(mask)]
# array([[1, 2],
#        [2, 3]])

或来自numpy masked array

newX = np.ma.array(x, mask = np.column_stack((mask, mask)))
newX

# masked_array(data =
#  [[1 2]
#  [2 3]
#  [-- --]],
#              mask =
#  [[False False]
#  [False False]
#  [ True  True]],
#        fill_value = 999999)

相关问题 更多 >