Python 屏蔽numpy数组的某些行并恢复

Python 屏蔽numpy数组的某些行并恢复,python,python-2.7,numpy,Python,Python 2.7,Numpy,我有一个带有掩码的掩码:(8781288,1)包括1和0,标签文件(y_lbl:(8781288,1))和一个带有专长的特征向量:(8781288,64)。我只需要从遮罩文件中1的特征向量和标签文件中获取这些行。如何做到这一点,以及如何基于元素中的掩码文件在掩码标签文件中应用(恢复)预测值(ypred)的相反操作 例如,在Matlab中,可以轻松地执行X=feat\u re(mask\u re==1),并且可以恢复到new\u lbl(mask\u re==1)=ypred,其中new\u lb

我有一个带有
掩码的掩码:(8781288,1)
包括1和0,
标签文件
(y_lbl:(8781288,1))和一个带有
专长的特征向量:(8781288,64)
。我只需要从遮罩文件中1的特征向量和标签文件中获取这些行。如何做到这一点,以及如何基于元素中的掩码文件在
掩码标签文件
中应用(恢复)预测值(
ypred
)的相反操作

例如,在Matlab中,可以轻松地执行
X=feat\u re(mask\u re==1)
,并且可以恢复到
new\u lbl(mask\u re==1)=ypred
,其中
new\u lbl=zero(8781288,1)
。我尝试在python中执行类似的操作:

 X=feat_re[np.where(mask_re==1),:]
 X.shape
(2, 437561, 64)
根据@hpaulj的建议编辑(解决)

问题在于我的掩码文件的形状,一旦我将其更改为
mask\u new=mask\u re.reformate((8781288))
,它就解决了我的问题,然后

X=feat_re[mask_new==1,:]
(437561, 64)
我怀疑你的错误来自
面具的形状

In [188]: mask1 = mask[:,None]                                                  
In [189]: mask1.shape                                                           
Out[189]: (3, 1)
In [190]: arr[mask1,:]                                                          
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-190-6317c3ea0302> in <module>
----> 1 arr[mask1,:]

IndexError: too many indices for array

您可以使用布尔索引进行掩蔽,如下所示

X=feat\u re[mask\u re==1,:]
X=X。重塑(2,-1,64)

这将选择(mask_re==1)为真的专长行。然后可以使用“重塑”功能重塑x。您可以再次使用“重塑”返回到相同的阵列形状。重塑中的“-1”表示需要通过numpy计算大小

您是否尝试过等效的
numpy
索引
arr[mask,:]
newarr[mask,:]=y
?您可以使用布尔掩码或索引数组(例如由
np.where(mask)
生成的数组)。有错误的特定示例可能会有所帮助。@hpaulj当我运行
feat\u re[mask\u re==1,:]
,它向我显示了一个错误
***索引器错误:数组的索引太多
在使用布尔掩码时匹配维度时必须小心。一旦我运行
X=feat\re[mask\u re==1]
,它显示了一个错误:
***索引器:布尔索引与维度1上的索引数组不匹配;维度为64,但相应的布尔维度为1
请尝试
X=feat\re[mask\u re==1,:]
。如果您能为我们提供简化的小型可运行代码版本,将更容易提供帮助
In [188]: mask1 = mask[:,None]                                                  
In [189]: mask1.shape                                                           
Out[189]: (3, 1)
In [190]: arr[mask1,:]                                                          
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-190-6317c3ea0302> in <module>
----> 1 arr[mask1,:]

IndexError: too many indices for array
In [191]: np.nonzero(mask)                                                      
Out[191]: (array([0, 2]),)     # 1 element tuple
In [192]: np.nonzero(mask1)                                                     
Out[192]: (array([0, 2]), array([0, 0]))    # 2 element tuple
In [193]: arr[_191]            # using the mask index                                                  
Out[193]: 
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])