Как напечатать массивы Numpy без лишних обозначений (квадратные скобки [] и пробелы между элементами)? - PullRequest
9 голосов
/ 22 марта 2012

У меня есть двумерный массив Numpy, который выглядит следующим образом:

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

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

abc
def
ghi

Возможно ли сделать это (без тривиального и, возможно, дорогого цикла Python, конечно)?

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

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

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

Ответы [ 4 ]

9 голосов
/ 23 марта 2012

Хотя это в значительной степени равносильно петле, я думаю, что это, вероятно, лучшее, что вы собираетесь получить.Как правило, строковый метод 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

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

3 голосов
/ 30 мая 2015
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='')
0 голосов
/ 09 мая 2017

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

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a))))
0 голосов
/ 23 марта 2012
>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...