python нулевая Как печатать массивы Numpy без каких-либо дополнительных обозначений(квадратные скобки[] и пробелы между элементами)?




numpy матрицы (4)

np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='')

У меня есть 2-мерный массив numpy, который выглядит так:

[[a b c]
 [d e f]
 [g h i]]

Я бы хотел напечатать его без какого-либо стандартного путаницы, который обычно поставляется с массивами; а именно [ , ] и пространства между элементами. Что-то вроде этого:

abc
def
ghi

Возможно ли это сделать (без тривиальной и, возможно, дорогостоящей петли Питона, конечно)?

Я посмотрел на numpy.set_printoptions, но похоже, что он только устанавливает параметры презентации, как отображаются элементы, а не символы между ними.

Изменить : элементы в массиве имеют строковое представление, которое может быть любым, в том числе [ , ] и пробелом. Минимальный пример построения такого массива:

class custom(object):
    def __repr__(self):
        return 'a'
a = numpy.empty((5, 5), custom)
a.fill(custom())
print a

Answer #1

Это довольно просто, если a ваш массив, просто выполните это:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a))))

Answer #2
>>> import numpy    
>>> a = numpy.array([[ 1.0,  2,  3], [ 4,  5,  6], [ 7,  8,  9]])
>>> print str(a).replace(' ','').replace('.','').replace('[','').replace(']','')
123
456
789

Answer #3

Хотя это в значительной степени соответствует циклу, я думаю, что это, вероятно, лучшее, что вы получите. Как правило, метод строки join выполняется довольно быстро.

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]])
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a)
123
246
-1-2-3

Думаю, в этот момент вам, вероятно, будет лучше всего реализовать что-то и измерить, сколько времени потребуется. Я предполагаю, что самая медленная часть кода будет на самом деле печатать на консоль, а не на объединение строк.





numpy