NumPy: seleção eficiente de índices de colunas específicas por linha
A seleção de dados é uma operação crucial na análise de dados. Ao trabalhar com arrays NumPy, selecionar colunas específicas de cada linha pode ser uma tarefa comum. Essa seleção pode ser realizada com vários métodos, mas selecionar colunas com base em uma lista de índices por linha requer uma abordagem mais eficiente.
Usando matrizes booleanas para seleção direta
Se você tiver uma matriz booleana indicando as colunas a serem selecionadas, poderá usar a seleção direta para extrair os valores desejados com eficiência. Matrizes booleanas podem ser criadas comparando uma lista de índices com o intervalo de colunas. Por exemplo, dada uma matriz X e uma lista de índices Y conforme descrito na pergunta, você pode criar uma matriz booleana b da seguinte forma:
import numpy as np
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Y = np.array([1, 0, 2])
b = np.arange(X.shape[1])[np.isin(np.arange(X.shape[1]), Y)]
Com o array booleano b, a seleção direta pode ser realizada :
result = X[np.arange(X.shape[0]), b]
Este método fornece uma maneira rápida de selecionar colunas específicas com base na matriz booleana.
Métodos alternativos
Como alternativa, você pode usar np.arange e seleção direta com base na lista de índices Y. Essa abordagem envolve a criação de uma matriz de índices e a seleção a partir do matriz X respectivamente:
result = X[np.arange(X.shape[0]), Y]
Conclusão
A seleção de índices de coluna específicos por linha no NumPy pode ser feita de forma eficiente usando matrizes booleanas. Este método fornece seleção rápida e direta de colunas com base em uma lista de índices. Para grandes matrizes de dados, esta abordagem oferecerá benefícios significativos de desempenho em relação aos métodos baseados em iteração.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3