Почему пустая матрица не позволяет мне печатать ее строки? - PullRequest
3 голосов
/ 28 марта 2010

Ладно, это, наверное, очень тупой вопрос, однако он действительно начинает болеть. У меня есть пустая матрица, и в основном я печатаю ее строка за строкой. Однако я хочу, чтобы каждая строка была отформатирована и разделена правильно.

>>> arr = numpy.matrix([[x for x in range(5)] for y in range(5)])
>>> arr
matrix([[0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4]])

Допустим, я хочу напечатать первую строку и добавить '|' между каждым элементом:

>>> '|'.join(map(str, arr[0,]))
'[[0 1 2 3 4]]'

Err ...

>>> '|'.join(map(lambda x: str(x[0]), arr[0]))
'[[0 1 2 3 4]]'

Меня действительно смущает такое поведение, почему оно это делает?

Ответы [ 3 ]

3 голосов
/ 28 марта 2010

arr возвращается как тип matrix, который не может быть итеративным объектом, который хорошо работает с join.

Вы можете конвертировать arr в list с tolist() и , затем выполнить ваше join.

>>> a = arr.tolist() # now you can manipulate the list.
>>> for i in a:
 '|'.join(map(str,i))    

'0|1|2|3|4'
'0|1|2|3|4'
'0|1|2|3|4'
'0|1|2|3|4'
'0|1|2|3|4'

Или с массивом, использующим numpy.asarry в этом отношении

>>> arr = numpy.matrix([[x for x in range(5)] for y in range(5)])
>>> ele = numpy.asarray(arr)
>>> '|'.join(map(str,ele[0,]))
'0|1|2|3|4' # as per your example.
1 голос
/ 28 марта 2010

В numpy срезы матриц - это матрицы (обратите внимание на двойные скобки [[ ]] в вашем примере).Простой способ обойти это - получить представление массива, используя атрибут .A.

'|'.join(map(str, arr.A[0,]))

производит то, что вы хотите:

0|1|2|3|4
0 голосов
/ 28 марта 2010
>>> arr[0,]
matrix([[0, 1, 2, 3, 4]])
>>> len(arr[0,])
1

Таким образом, arr [0,] не является списком или массивом 1-d, как вы ожидали С другой стороны, ваш метод работает для примера матрицы из учебника numpy:

>>> def f(x,y):
...         return 10*x+y
...
>>> b = fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> len(b[0,])
4
>>> '|'.join(map(str, b[0,]))
'0|1|2|3'

Я не знаком с NumPy, поэтому я могу сказать, почему это происходит. Еще одно наблюдение:

>>> type(arr)
<class 'numpy.matrixlib.defmatrix.matrix'>
>>> type(b)
<type 'numpy.ndarray'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...