ti-enxame.com

Extraindo colunas específicas na matriz numpy

Esta é uma pergunta fácil, mas digo que tenho uma matriz MxN. Tudo o que quero fazer é extrair colunas específicas e armazená-las em outro array numpy, mas recebo erros de sintaxe inválidos. Aqui está o código:

extractedData = data[[:,1],[:,9]]. 

Parece que a linha acima deve ser suficiente, mas acho que não. Olhei em volta, mas não consegui encontrar nada de sintaxe em relação a esse cenário específico.

127
Aladdin

Eu suponho que você queria colunas 1 e 9? Isso é

data[:, [1, 9]]

Ou com nomes:

data[:, ['Column Name1','Column Name2']]

Você pode obter os nomes de data.dtype.names

223
Fred Foo

Supondo que você deseja obter as colunas 1 e 9 com esse snippet de código, ele deve ser:

extractedData = data[:,[1,9]]
24
Michael J. Barber

se você quiser extrair apenas algumas colunas:

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

se você quiser excluir colunas específicas:

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]
9
queise

Somente:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

As colunas não precisam estar em ordem:

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])
4
yanhh

Uma coisa que gostaria de salientar é que, se o número de colunas que você deseja extrair for 1, a matriz resultante não seria uma matriz Mx1 como você poderia esperar, mas em vez disso, uma matriz contendo os elementos da coluna extraída.

Para convertê-lo em Matriz, o método reshape (M, 1) deve ser usado na matriz resultante.

2
Daksh

Você pode usar :

extracted_data = data.ix[:,['Column1','Column2']]

1
Rahul

Mais uma coisa que você deve prestar atenção ao selecionar colunas da matriz N-D usando uma lista como esta:

data[:,:,[1,9]]

Se você estiver removendo uma dimensão (selecionando apenas uma linha, por exemplo), a matriz resultante será (por algum motivo) permutada. Assim:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!
1
Jan Kukacka