Итерация по пустым строкам матрицы - PullRequest
0 голосов
/ 10 июня 2018

Сначала я попытался найти ответ на свой вопрос (который я считаю довольно простым) при поиске в Google и на сайте, но ничего не вышло.

Я пытаюсь получить строки изматрица, но я не могу.Например, если я использую это:

result = numpy.matrix([[11, 12, 13],
                       [21, 22, 23],
                       [31, 32, 33]])

for p in result:
    print(p[0])

печатает это:

[[11 12 13]]
[[21 22 23]]
[[31 32 33]]

То же самое, если я использую только p

Что мне нужно сделать, чтобы получить доступкаждый ряд?numpy.nditer(result) печатает массив, и мне нужно, чтобы каждая строка выполняла некоторые операции.

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Попробуйте следующее:

for p in result:
    print(numpy.array(p)[0])

Это дает вам каждый ряд как numpy.ndarray.

0 голосов
/ 10 июня 2018

Есть два способа (оба по существу сводятся к одной и той же логике)

метод-1:

Использование result.A

Возврат self как ndarray объект.
Эквивалент np.asarray(self).

In [16]: for row in result.A:
    ...:     print(row)
    ...:     
[11 12 13]
[21 22 23]
[31 32 33]

method-2:

Использование result.getA()

Возвращает self как ndarray объект.
Эквивалент np.asarray(self).

In [17]: for row in result.getA():
    ...:     print(row)
    ...:     
[11 12 13]
[21 22 23]
[31 32 33]
0 голосов
/ 10 июня 2018

Проблема в том, что вы используете np.matrix.Вместо этого используйте np.array и просто выполняйте итерацию без индексации:

result = np.array([[11, 12, 13],
                   [21, 22, 23],
                   [31, 32, 33]])

for p in result:
    print(p)

[11 12 13]
[21 22 23]
[31 32 33]

Пояснение

Вы видите эффект numpy.matrix, требующий каждой строки чтобы иметь 2 размера.Это ненужный и анти-паттерн для NumPy.

За историей numpy.matrix стоит история.Использовался начальный для удобства операторов умножения матриц.Но это больше не проблема, поскольку возможен @ (Python 3.5+) вместо вложенных вызовов dot.Поэтому по умолчанию используйте numpy.array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...