una que ordenar multiplicacion matriz matrices ejemplos como arreglos python arrays numpy edit-in-place

python - que - Reorganizar columnas de matriz 2D numpy



que es numpy (2)

¿Hay alguna manera de cambiar el orden de las columnas en una matriz 2D numpy a un orden nuevo y arbitrario? Por ejemplo, tengo una matriz

array([[10, 20, 30, 40, 50], [ 6, 7, 8, 9, 10]])

y quiero cambiarlo en, digamos

array([[10, 30, 50, 40, 20], [ 6, 8, 10, 9, 7]])

aplicando la permutación

0 -> 0 1 -> 4 2 -> 1 3 -> 3 4 -> 2

en las columnas. En la nueva matriz, por lo tanto, quiero que la primera columna del original permanezca en su lugar, la segunda para moverse a la última columna y así sucesivamente.

¿Hay una función numpy para hacerlo? Tengo una matriz bastante grande y espero obtener las más grandes, así que necesito una solución que haga esto rápidamente y en su lugar si es posible (las matrices de permutación son un no-go)

Gracias.


Esto es posible mediante la indexación de fantasía:

>>> import numpy as np >>> a = np.array([[10, 20, 30, 40, 50], ... [ 6, 7, 8, 9, 10]]) >>> your_permutation = [0,4,1,3,2] >>> i = np.argsort(your_permutation) >>> i array([0, 2, 4, 3, 1]) >>> a[:,i] array([[10, 30, 50, 40, 20], [ 6, 8, 10, 9, 7]])

Tenga en cuenta que esto es una copia, no una vista. Una permutación in situ no es posible en el caso general, debido a la forma en que se ordenan las matrices numpy en la memoria.


Tengo una solución basada en matriz para esto, por la multiplicación posterior de una matriz de permutación a la original. Esto cambia la posición de los elementos en la matriz original.

import numpy as np a = np.array([[10, 20, 30, 40, 50], [ 6, 7, 8, 9, 10]]) # Create the permutation matrix by placing 1 at each row with the column to replace with your_permutation = [0,4,1,3,2] perm_mat = np.zeros((len(your_permutation), len(your_permutation))) for idx, i in enumerate(your_permutation): perm_mat[idx, i] = 1 print np.dot(a, perm_mat)