NumPy: selección eficiente de índices de columnas específicos por fila
La selección de datos es una operación crucial en el análisis de datos. Cuando se trabaja con matrices NumPy, seleccionar columnas específicas de cada fila puede ser una tarea común. Esta selección se puede lograr con varios métodos, pero seleccionar columnas basadas en una lista de índices por fila requiere un enfoque más eficiente.
Uso de matrices booleanas para selección directa
Si tiene una matriz booleana que indica las columnas que se seleccionarán, puede utilizar la selección directa para extraer los valores deseados de manera eficiente. Se pueden crear matrices booleanas comparando una lista de índices con el rango de columnas. Por ejemplo, dada una matriz X y una lista de índices Y como se describe en la pregunta, puede crear una matriz booleana b de la siguiente manera:
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)]
Con la matriz booleana b se puede realizar la selección directa :
result = X[np.arange(X.shape[0]), b]
Este método proporciona una forma rápida de seleccionar columnas específicas según en la matriz booleana.
Métodos alternativos
Como alternativa, puede utilizar np.arange y la selección directa basada en la lista de índice Y. Este enfoque implica crear una matriz de índices y seleccionando de la matriz X en consecuencia:
result = X[np.arange(X.shape[0]), Y]
Conclusión
La selección de índices de columnas específicas por fila en NumPy se puede realizar de manera eficiente utilizando matrices booleanas. Este método proporciona una selección rápida y sencilla de columnas basada en una lista de índices. Para grandes conjuntos de datos, este enfoque ofrecerá importantes beneficios de rendimiento en comparación con los métodos basados en iteraciones.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3