2012-09-15 34 views
5

给定一个2D numpy数组,例如:使用布尔索引复制或查看numpy子阵列

import numpy as np 

data = np.array([ 
    [11,12,13], 
    [21,22,23], 
    [31,32,33], 
    [41,42,43],   
    ]) 

我需要既创建一个新的子阵列或修改基于针对所期望的行和列中的两个掩蔽向量来代替所选择的元素;

rows = [False, False, True, True] 
cols = [True, True, False] 

这样

print subArray 

# [[31 32] 
# [41 42]] 
+0

请注意,'copy'和'view'(如标题中)是完全不同的东西。 – askewchan

回答

4

首先,确保你的rowscols实际上是布尔ndarrays,然后用它们来索引数据

rows = np.array([False, False, True, True], dtype=bool) 
cols = np.array([True, True, False], dtype=bool) 
data[rows][:,cols] 

解释 如果您使用清单布尔代替ndarray,numpy会将False/True转换为0/1,并将其解释为所需行/列的索引。当使用bool ndarray时,你实际上使用了一些特定的NumPy机制。

+0

伟大的,现在清楚谢谢。对于相同的结果,不要像Matlab那样直截了当。我有一个[后续](http://stackoverflow.com/q/12437264/789215) - 我如何做到这一点,而不创建一个新的数组? –