Сортировка матрицы произвольно по столбцам - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть матрица типа:

[[col1,col2,col3,col4,col5],
 [4,1,3,6,2],
 [9,4,1,3,6]]

Я хочу изменить порядок матрицы по столбцам произвольно, как:

[[col3,col1,col5,col4,col2],
 [3,4,2,6,1],
 [1,9,6,3,4]]

Я знаю, что если бы это была одна строка, я мог бысоздайте список заказов, например order_list = [2,0,4,3,1], а затем используйте списочное понимание ordered_list = [old_list[i] for i in order_list], но здесь я не смог придумать способ создать вложенное понимание, где я делаю эту операцию для каждой строки.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если вы должны сделать вывод списка

Имея список

l=[[2,0,1],[4,5,6],[7,8,9]]

Используя некоторые списки вы можете сделать

>>> [[x[i] for i in l[0]] for x in l[1:]]
[[6, 4, 5], [9, 7, 8]]

Если вы хотитевесь массив обратно вы можете сделать

>>> [l[0]]+[ [x[i] for i in l[0]] for x in l[1:]]
[[2, 0, 1], [6, 4, 5], [9, 7, 8]]
0 голосов
/ 12 ноября 2018

Я предлагаю использовать необычную индексацию numpy.

>>> import numpy as np
>>> a = np.array([[4,1,3,6,2], [9,4,1,3,6]])                                                                                           
>>> cols = [2,0,4,3,1]                                                                                                                 
>>> a.T[cols].T                                                                                                                        
>>> 
array([[3, 4, 2, 6, 1],
       [1, 9, 6, 3, 4]])

Подробности:

>>> a
array([[4, 1, 3, 6, 2],
       [9, 4, 1, 3, 6]])
>>> a.T
array([[4, 9],
       [1, 4],
       [3, 1],
       [6, 3],
       [2, 6]])
>>> a.T[cols]
array([[3, 1],
       [4, 9],
       [2, 6],
       [6, 3],
       [1, 4]])
>>> a.T[cols].T
array([[3, 4, 2, 6, 1],
       [1, 9, 6, 3, 4]])
...