Строковое представление массива numpy с запятыми, разделяющими его элементы
У меня есть массив numpy, например:
points = np.array([[-468.927, -11.299, 76.271, -536.723],
[-429.379, -694.915, -214.689, 745.763],
[ 0., 0., 0., 0. ]])
если я печатаю его или превращаю в строку с помощью str(), я получаю:
print w_points
[[-468.927 -11.299 76.271 -536.723]
[-429.379 -694.915 -214.689 745.763]
[ 0. 0. 0. 0. ]]
Мне нужно превратить его в строку, которая печатает с разделительными запятыми, сохраняя структуру 2D-массива, а именно:
[[-468.927, -11.299, 76.271, -536.723],
[-429.379, -694.915, -214.689, 745.763],
[ 0., 0., 0., 0. ]]
Кто-нибудь знает простой способ превратить массив numpy в эту форму строки?
Я знаю, что .tolist() добавляет запятые, но результат теряет двумерную структуру.
Ответы
Ответ 1
Попробуйте использовать repr
>>> import numpy as np
>>> points = np.array([[-468.927, -11.299, 76.271, -536.723],
... [-429.379, -694.915, -214.689, 745.763],
... [ 0., 0., 0., 0. ]])
>>> print repr(points)
array([[-468.927, -11.299, 76.271, -536.723],
[-429.379, -694.915, -214.689, 745.763],
[ 0. , 0. , 0. , 0. ]])
Если вы планируете использовать большие массивы numpy, сначала установите np.set_printoptions(threshold=np.nan)
. Без него представление массива будет усечено после примерно 1000 записей (по умолчанию).
>>> arr = np.arange(1001)
>>> print repr(arr)
array([ 0, 1, 2, ..., 998, 999, 1000])
Конечно, если у вас есть большие массивы, это начинает становиться менее полезным, и вы, вероятно, должны анализировать данные не так, как просто смотреть на него, и есть лучшие способы сохранения массива numpy, чем сохранение его repr
в файл...
Ответ 2
Теперь, в numpy 1.11, есть numpy.array2string
:
In [279]: a = np.reshape(np.arange(25, dtype='int8'), (5, 5))
In [280]: print(np.array2string(a, separator=', '))
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]]
Сравнение с repr
с @mgilson (показывает "array()" и dtype
):
In [281]: print(repr(a))
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]], dtype=int8)
P.S. Еще нужно np.set_printoptions(threshold=np.nan)
для большого массива.
Ответ 3
Другой способ сделать это, что особенно полезно, когда объект не имеет метода __repr __(), заключается в использовании модуля Python pprint (который имеет различные параметры форматирования). Вот что выглядит, например:
>>> import numpy as np
>>> import pprint
>>>
>>> A = np.zeros(10, dtype=np.int64)
>>>
>>> print(A)
[0 0 0 0 0 0 0 0 0 0]
>>>
>>> pprint.pprint(A)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])