«Ошибка несоответствия формы» при замене матрицы - PullRequest
0 голосов
/ 12 января 2019

Я использую python2.7 и numpy, и у меня есть следующая матрица:

L = np.asmatrix([[0,1,2,3,4], [5,6,7,8,9]])

и я пытаюсь поменять местами L [[0,1], 0] с L [[1,0], 0], но у меня ошибка:

"несоответствие формы: массив значений формы (2,1) не может быть передан для индексации результата формы (2,)"

Я не могу этого понять, потому что, если я печатаю L [[0,1], 0] и L [[1,0], 0], они возвращают

L[[0,1], 0] = matrix([[0]
                      [5]])
L[[1,0], 0] = matrix([[5]
                      [0]])

В любом случае, если я поменяю местами всю строку с помощью L [[0,1],:] = L [[1,0],:], то все будет отлично, но я не хочу этого делать.

Есть ли у вас какие-либо предложения?

1 Ответ

0 голосов
/ 12 января 2019

Это кажется уродливым поведением класса np.matrix: если вы напишите L[[0,1], 0] как выражение, вы получите (двумерную) матрицу обратно, но если вы попытаетесь присвоить L[[0,1], 0], NumPy хочет, чтобы вы дали что-то одномерное!

Непосредственный способ решить эту проблему - записать выражение слева как двумерный срез, заменив 0 во втором измерении на срез 0:1:

L[[0,1], 0:1] = L[[1,0], 0]

Но вы почти наверняка просто хотите избежать использования np.matrix целиком и просто использовать np.array. Старая матрица NumPy является устаревшим, когда-то устаревшим классом. Массивы имеют ожидаемое поведение, и вы можете просто написать это:

In [1]: L = np.array([[0,1,2,3,4], [5,6,7,8,9]])
   ...: L[[0,1], 0] = L[[1,0], 0]
   ...: L

Out[1]: 
array([[5, 1, 2, 3, 4],
       [0, 6, 7, 8, 9]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...