"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo extraer elementos de una matriz Numpy 2D usando índices de otra matriz?

¿Cómo extraer elementos de una matriz Numpy 2D usando índices de otra matriz?

Publicado el 2025-03-25
Navegar:973

How to Extract Elements from a 2D NumPy Array Using Indices from Another Array?

extrayendo elementos de una matriz 2D usando índices de otra matriz

en numpy, a veces se hace necesario extraer elementos específicos de una matriz multidimensional basada en índices almacenados en otra matriz. Este escenario a menudo surge cuando se trabaja con estructuras de datos como matrices dispersas o selecciones indexadas.

problema:

considere dos matrices numpy:

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([[1], [0], [1]])  # Index array

El objetivo es extraer un elemento de cada fila de A, donde el elemento específico se especifica por el índice en la fila correspondiente de B. La salida esperada debe ser:

c = np.array ([1], [2], [5]])
C = np.array([[1], [2], [5]])

soluciones:

1. Indexación de matriz puramente enteros:

a [np.arange (a.shape [0]), b.Ravel ()]
C = np.array([[1], [2], [5]])
Este método implica usar las capacidades de indexación de la matriz entera de Numpy. Genera un rango de índices correspondientes a las filas de A y la combina con la matriz B aplanada para seleccionar los elementos apropiados.

2. Transpose y np.Choose:

np.choose (B.Ravel (), a.t)
C = np.array([[1], [2], [5]])
En este enfoque alternativo, transpone A para que coincida con la forma de B y luego use NP.Choose para seleccionar los elementos deseados basados ​​en la matriz B flatada. ITABERILLO DESPACKING (Python> = 3.6):

*a = A.T C = np.array ([*zip (*a)] [i] para i en B.Ravel ()) Este método usa Iterable Desempacking para convertir una lista de filas y luego itera sobre las filas de A basadas en los índices en B para extraer los elementos deseados.

*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())

[a [i] [j] para i, j en zip (range (a.shape [0]), b.ravel ()]

Las comprensiones de la lista selección.

[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]

a [np.stack ([range (a.shape [0]), B.Ravel ()], axis = 1)]

La indexación elegante permite operaciones de indexación más eficientes y compactas. En este caso, crea una matriz 2D con los índices de fila y los índices B, que se pueden usar para seleccionar los elementos deseados de a.

La solución más apropiada depende de los requisitos y restricciones específicas de la tarea, como la eficiencia, la legibilidad y la compatibilidad con las versiones más antiguas de Numpy.
            
Último tutorial Más>

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