Я хочу преобразовать a = [1,2,3,4,5]
в a_string = "1 2 3 4 5"
. Реальный массив numpy довольно большой (50000x200), поэтому я предполагаю, что использование for loops
слишком медленное.
Как печатать массив Numpy без скобок?
Ответ 1
Вы можете использовать метод join
из строки:
>>> a = [1,2,3,4,5]
>>> ' '.join(map(str, a))
"1 2 3 4 5"
Ответ 2
np.savetxt
import numpy as np
import sys
a = np.array([[0.0, 1.0, 2.0, 3.0]])
np.savetxt(sys.stdout, a)
Вывод:
0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
Или, если массив инвертирован:
a = np.array([0.0, 1.0, 2.0, 3.0])
np.savetxt(sys.stdout, a, newline=" ")
Или, если вам действительно нужна строка:
import StringIO
s = StringIO.StringIO()
np.savetxt(s, a)
print s.getvalue()
Вы можете контролировать точность с помощью fmt
, чтобы получить:
np.savetxt(sys.stdout, a, fmt="%.3f")
выход:
0.000 1.000 2.000 3.000
или
np.savetxt(sys.stdout, a, fmt="%i")
выход:
0 1 2 3
Протестировано на Python 2.7.12, numpy 1.11.1.
Ответ 3
Numpy предоставляет две функции для этого array_str и array_repr - любой из них должен соответствовать вашим потребностям. Так как вы можете использовать любой из них, вот пример каждого из них:
>>> from numpy import arange, reshape, array_str
>>> M = arange(10).reshape(2,5)
>>> M
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> array_str(M)
'[[0 1 2 3 4]\n [5 6 7 8 9]]'
>>> array_repr(M)
'array([[0, 1, 2, 3, 4],\n [5, 6, 7, 8, 9]])'
Эти две функции очень оптимизированы и, как таковые, должны быть предпочтительнее функции, которую вы могли бы написать самостоятельно. Имея дело с массивами такого размера, я бы предположил, что вам нужна вся скорость, которую вы можете получить.
Ответ 4
Если у вас есть массив numpy, а не список (так как вы упоминаете "реальный массив numpy" в своем сообщении), вы можете использовать re.sub
в строчном представлении массива
print(re.sub('[\[\]]', '', np.array_str(a)))
Опять же, это предполагает, что ваш массив a
был в несколько раз массивным массивом. Это также имеет преимущество в работе над матрицами.