2012-09-15 28 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) - 我如何做到這一點,而不創建一個新的數組? –