Bagaimana cara mencetak array Numpy tanpa notasi tambahan (tanda kurung siku [] dan spasi antar elemen)?

Saya memiliki array numpy 2 dimensi yang terlihat seperti ini:

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

Saya ingin mencetaknya tanpa notasi default apa pun yang biasanya disertakan dengan array; yaitu [, ] dan spasi antar elemen. Sesuatu seperti ini:

abc
def
ghi

Apakah mungkin untuk melakukan hal seperti itu (tentu saja tanpa loop Python yang sepele dan mungkin mahal)?

Saya telah melihat numpy.set_printoptions tetapi sepertinya itu hanya menetapkan pilihan presentasi tentang bagaimana elemen ditampilkan, bukan karakter di antaranya.

Edit: Elemen dalam array memiliki representasi string yang dapat berupa apa saja, termasuk [, ], dan spasi. Contoh minimal cara membuat array seperti itu:

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 sumber
comment
Untuk lebih jelasnya: repr khusus Anda menyertakan terminal . yang ingin Anda hapus, namun mungkin menyertakan terminal lain yang tidak ingin Anda hapus? Saya tidak yakin saya mengerti apa yang ingin Anda hapus.   -  person DSM    schedule 23.03.2012
comment
Sayang sekali, ini karena saya mengedit representasi dengan tangan. Pertanyaan awal saya menggunakan deretan angka biasa yang numpy, yang ada . setelah setiap angka digunakan sebagai pembatas (atau sebagai pemisah desimal, tidak yakin). Kemudian, saya mengedit pertanyaan saya untuk mencerminkan bahwa tipe data array belum tentu numerik, dan lupa mengubah pembatasnya. Diedit lagi.   -  person Etienne Perot    schedule 23.03.2012
comment
Subset: hanya hapus []: stackoverflow.com/questions/9360103/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 05.02.2017


Jawaban (4)


Meskipun ini merupakan satu putaran, saya pikir ini mungkin yang terbaik yang akan Anda dapatkan. Umumnya metode string join cukup cepat.

>>> 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

Saya pikir pada titik ini Anda mungkin sebaiknya menerapkan sesuatu dan mengukur berapa lama waktu yang dibutuhkan. Dugaan saya adalah bagian paling lambat dari kode akan dicetak ke konsol, bukan menggabungkan string.

person Wilduck    schedule 22.03.2012
comment
Yah, saya rasa itu berarti tidak ada cara yang mudah untuk melakukannya. Terima kasih - person Etienne Perot; 23.03.2012

Ini cukup sederhana, jika a adalah array Anda, lakukan saja ini:

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

person    schedule
comment
Apakah Anda benar-benar membutuhkan .buffer di sys.stdout.buffer? - person Ciro Santilli 新疆再教育营六四事件ۍ 05.02.2017
comment
@CiroSantilli烏坎事件2016六四事件法轮功, savetxt menulis bytestring dan mengharapkan file biner - person panda-34; 05.02.2017

person    schedule
comment
+1 karena menjawab pertanyaan yang saya ajukan, tetapi array sebenarnya yang dimaksud menggunakan tipe data khusus yang representasi stringnya dapat berupa apa saja, termasuk spasi dan tanda kurung. Mengedit pertanyaan untuk mencerminkan hal ini - person Etienne Perot; 23.03.2012
comment
@Etienne Perot - kembali ke papan gambar! - person fraxel; 23.03.2012