2015-11-19 11 views
0

Очень новый для использования Python, но мне удалось создать код, который дает мне массив ниже. Не буду вдаваться в подробности назначения, но следующим шагом я бы хотел переставить элемент -6 так, чтобы он располагался по диагонали.Как изменить порядок элементов в массиве по диагонали

[[-6. 0. 1. 0. 1. 0. 1.] 
[-6. 0. 1. 0. 1. 1. 0.] 
[-6. 0. 1. 1. 0. 0. 1.] 
[-6. 0. 1. 1. 0. 1. 0.] 
[-6. 1. 0. 0. 1. 0. 1.] 
[-6. 1. 0. 0. 1. 1. 0.] 
[-6. 1. 0. 1. 0. 0. 1.] 
[-6. 1. 0. 1. 0. 1. 0.]] 
+1

Приведите пример ожидаемого ввода вместе с ожидаемым выходом и кодом, который вы до сих пор решаете для решения этой проблемы. – shuttle87

+0

Я пробовал использовать функцию np.argmin с таким кодом: b = a [:, np.argmin (a, axis = 1)]. –

+0

Что вы больше всего не в силе? Попробуйте объяснить в точном математическом выражении. – shuttle87

ответ

0

Обратите внимание, что вы пытаетесь получить значение в диагональное формирование, так что вы будете делать заказ на следующий -6 одно места дальше вправо, чем предыдущий. Поскольку вы каждый раз будете индексировать что-то по одному, это звучит как хорошее место для цикла.

1

Установка диагонали легко:

import numpy as np 

a = np.random.randint(0,10,(11,10)) # I notice your matrix is not square! 

In [31] a 
Out[31]: 
array([[0, 7, 6, 0, 8, 6, 4, 1, 0, 9], 
     [4, 7, 6, 0, 3, 4, 6, 6, 9, 2], 
     [2, 3, 9, 6, 2, 3, 0, 0, 2, 7], 
     [5, 9, 6, 8, 3, 3, 0, 8, 3, 5], 
     [0, 0, 7, 0, 4, 8, 2, 4, 8, 7], 
     [3, 3, 1, 6, 6, 4, 9, 5, 1, 2], 
     [8, 1, 8, 4, 9, 6, 6, 4, 2, 7], 
     [0, 8, 0, 1, 1, 9, 9, 7, 7, 1], 
     [9, 2, 6, 2, 8, 9, 4, 8, 0, 8], 
     [4, 4, 2, 7, 7, 4, 4, 7, 8, 6], 
     [5, 3, 5, 8, 1, 7, 3, 5, 5, 7]]) 




np.fill_diagonal(a,a[:,0]) 

In [33] a 
Out[33]: 
array([[0, 7, 6, 0, 8, 6, 4, 1, 0, 9], 
     [4, 4, 6, 0, 3, 4, 6, 6, 9, 2], 
     [2, 3, 2, 6, 2, 3, 0, 0, 2, 7], 
     [5, 9, 6, 5, 3, 3, 0, 8, 3, 5], 
     [0, 0, 7, 0, 0, 8, 2, 4, 8, 7], 
     [3, 3, 1, 6, 6, 3, 9, 5, 1, 2], 
     [8, 1, 8, 4, 9, 6, 8, 4, 2, 7], 
     [0, 8, 0, 1, 1, 9, 9, 0, 7, 1], 
     [9, 2, 6, 2, 8, 9, 4, 8, 9, 8], 
     [4, 4, 2, 7, 7, 4, 4, 7, 8, 4], 
     [5, 3, 5, 8, 1, 7, 3, 5, 5, 7]]) 

Однако, если вы хотели сделать преобразование/вращение, то вы должны определить, как вы хотите, чтобы это произошло (я не вижу, как вы будете работать, что на неквадратной матрице).