2012-09-15 14 views
5

Dada una matriz numpy 2D, es decir;Copie o vea el subarreglo numpy usando la indexación booleana

import numpy as np 

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

I necesidad tanto de crear una nueva sub-matriz o modificar los elementos seleccionados de lugar sobre la base de dos vectores de enmascaramiento para las filas y columnas deseadas;

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

De tal manera que

print subArray 

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

Tenga en cuenta que 'copy' y' view' (como en el título) son cosas muy diferentes. – askewchan

Respuesta

4

En primer lugar, asegúrese de que su rows y cols son en realidad booleano ndarrays, luego los utilizan para indexar sus datos

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

Explicación Si utilice una lista de booleanos en lugar de ndarray, numpy convertirá el False/True en 0/1, e interprete eso como índices de las filas/columnas que desee. Al usar un bool ndarray, en realidad está usando algunos mecanismos NumPy específicos.

+0

Genial, eso está claro ahora gracias. Simplemente no es tan directo como Matlab para el mismo resultado. Tengo un [seguimiento] (http://stackoverflow.com/q/12437264/789215) - ¿cómo hago esto en el lugar, sin crear una nueva matriz? –

Cuestiones relacionadas