2012-09-15 9 views
5

Bir 2B numpy dizisi verildi, yani;Boole indekslemesini kullanarak numpy altdizini kopyala veya görüntüle

import numpy as np 

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

Hem yeni bir alt-dizi oluşturmak veya arzu edilen satır ve sütunların iki maskeleme vektörleri tabanlı bir yerde seçilen elemanları değiştirmek gerekir;

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

Öyle ki

print subArray 

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

"Kopyala" ve "görünüm" (başlıkta olduğu gibi) çok farklı şeyler olduğunu unutmayın. – askewchan

cevap

4

İlk olarak, rows ve cols sonra, aslında boolean ndarrays olan Eğer

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

açıklanması veri endekse bunları kullanmak emin olun listesini kullan ndarray yerine booleans'in'u, numpy False/True'u 0/1 olarak dönüştürür ve bunu istediğiniz satırların/kodların indisleri olarak yorumlayabilir. Bir bool ndarray kullanırken, aslında belirli bazı NumPy mekanizmalarını kullanıyorsunuz.

+0

Harika, şimdi teşekkürler. Aynı sonuç için Matlab kadar basit değil. [Takip] (http://stackoverflow.com/q/12437264/789215) var - yeni bir dizi oluşturmadan bunu yerinde nasıl yapabilirim? –