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

У меня есть двумерный массив 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

person Etienne Perot    schedule 22.03.2012    source источник
comment
Просто для ясности: ваше собственное представление включает в себя терминал ., от которого вы хотите избавиться, но может включать и другие, которых у вас нет? Я не уверен, что понимаю, что ты хочешь раздеть.   -  person DSM    schedule 23.03.2012
comment
Плохо, это было из-за того, что я редактировал представление вручную. В моем первоначальном вопросе использовался массив обычных чисел, для которого есть . после каждого числа, используемого в качестве разделителя (или в качестве десятичного разделителя, не уверен). Позже я отредактировал свой вопрос, чтобы отразить, что тип данных массива не обязательно был числовым, и забыл соответствующим образом изменить разделитель. Еще раз отредактировал.   -  person Etienne Perot    schedule 23.03.2012
comment
Подмножество: удалить только []: stackoverflow.com/questions/9360103/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 05.02.2017


Ответы (4)


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

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

person Wilduck    schedule 22.03.2012
comment
Ну, я думаю, это означает, что нет никакого способа сделать это. Спасибо, в любом случае - person Etienne Perot; 23.03.2012

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

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a))))
person Manoj Narang    schedule 09.05.2017

person    schedule
comment
Вам действительно нужно .buffer в sys.stdout.buffer? - person Ciro Santilli 新疆再教育营六四事件ۍ 05.02.2017
comment
@CiroSantilli烏坎事件2016六四事件法轮功, savetxt записывает строку байтов и поэтому ожидает двоичный файл - person panda-34; 05.02.2017

person    schedule
comment
+1, потому что он действительно отвечает на вопрос, который я задал, но в рассматриваемом реальном массиве используется пользовательский тип данных, для которого строковое представление может быть любым, включая пробелы и скобки. Отредактировал вопрос, чтобы отразить это - person Etienne Perot; 23.03.2012
comment
@Etienne Perot - вернемся к чертежной доске! - person fraxel; 23.03.2012