Saya ingin tahu, apakah ada cara untuk mencetak yang diformat numpy.arrays
, misalnya dengan cara yang mirip dengan ini:
x = 1.23456
print '%.3f' % x
Jika saya ingin mencetak numpy.array
float, ia mencetak beberapa desimal, seringkali dalam format 'ilmiah', yang agak sulit dibaca bahkan untuk array dimensi rendah. Namun, numpy.array
tampaknya harus dicetak sebagai string, yaitu dengan %s
. Apakah ada solusi untuk ini?
python
numpy
python-2.x
pretty-print
camillio
sumber
sumber
Jawaban:
Anda dapat menggunakan
set_printoptions
untuk mengatur presisi output:Dan
suppress
menekan penggunaan notasi ilmiah untuk jumlah kecil:Lihat dokumen untuk set_printoptions untuk opsi lain.
Untuk menerapkan opsi cetak secara lokal , menggunakan NumPy 1.15.0 atau lebih baru, Anda dapat menggunakan manajer konteks numpy.printoptions . Misalnya, di dalam
with-suite
precision=3
dansuppress=True
diatur:Tetapi di luar
with-suite
opsi cetak kembali ke pengaturan default:Jika Anda menggunakan NumPy versi sebelumnya, Anda dapat membuat sendiri pengelola konteks. Sebagai contoh,
Untuk mencegah nol dilucuti dari ujung pelampung:
np.set_printoptions
sekarang memilikiformatter
parameter yang memungkinkan Anda menentukan fungsi format untuk setiap jenis.yang mencetak
dari pada
sumber
print
, tetapi Anda bisa menggunakan manajer konteks untuk membuat sesuatu yang serupa. Saya telah mengedit posting di atas untuk menunjukkan apa yang saya maksud.np.set_printoptions(precision=3)
menekan angka nol .. bagaimana Anda membuatnya ditampilkan seperti ini[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
jika Anda menginginkan representasi string dan tidak harus digunakanprint
. Anda bisa memanggil__str__()
instance array numpy dan Anda akan mendapatkan string yang diformat sesuai dengan opsi print yang Anda atur.Anda bisa mendapatkan subset
np.set_printoptions
fungsionalitas darinp.array_str
perintah, yang hanya berlaku untuk satu pernyataan cetak.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Sebagai contoh:
sumber
Unutbu memberikan jawaban yang sangat lengkap (mereka juga mendapat +1 dari saya), tapi di sini ada alternatif lo-tech:
Sebagai fungsi (menggunakan
format()
sintaks untuk memformat):Pemakaian:
Indeks array dapat diakses dalam format string:
sumber
FYI Numpy 1.15 (tanggal rilis tertunda) akan menyertakan manajer konteks untuk pengaturan opsi cetak secara lokal . Ini berarti bahwa berikut ini akan bekerja sama dengan contoh yang sesuai dalam jawaban yang diterima (oleh unutbu dan Neil G) tanpa harus menulis manajer konteks Anda sendiri. Misalnya, menggunakan contoh mereka:
sumber
Permata yang membuatnya sangat mudah untuk mendapatkan hasil sebagai string (dalam versi numpy hari ini) disembunyikan dalam jawaban denis:
np.array2string
sumber
Bertahun-tahun kemudian, satu lagi di bawah. Tapi untuk penggunaan sehari-hari saya hanya
sumber
Dan inilah yang saya gunakan, dan itu sangat tidak rumit:
sumber
Terkejut tidak melihat
around
metode yang disebutkan - berarti tidak mengotak dengan opsi cetak.sumber
Saya sering ingin kolom yang berbeda memiliki format yang berbeda. Berikut adalah cara saya mencetak larik 2D sederhana menggunakan beberapa variasi dalam pemformatan dengan mengubah (irisan) larik NumPy saya menjadi tuple:
sumber
numpy.char.mod
mungkin juga berguna, tergantung pada detail aplikasi Anda misalnya:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
akan mengembalikan array string dengan elemen "Value = 5.00", "Value = 5.10" dll. (sebagai contoh yang agak dibuat-buat).sumber
Array numpy memiliki metode
round(precision)
yang mengembalikan array numpy baru dengan elemen dibulatkan sesuai.sumber
Saya menemukan bahwa format float biasa {: 9.5f} berfungsi dengan baik - menekan notasi elektronik bernilai kecil - ketika menampilkan daftar atau array menggunakan loop. Tetapi format itu terkadang gagal menekan e-notasinya ketika seorang formatter memiliki beberapa item dalam satu pernyataan cetak. Sebagai contoh:
Hasil saya menunjukkan bug dalam kasus 4, 5, dan 6:
Saya tidak punya penjelasan untuk ini, dan karena itu saya selalu menggunakan loop untuk keluaran mengambang dari beberapa nilai.
sumber
saya menggunakan
Tidak sulit untuk memodifikasinya untuk array multi dimensi.
sumber
Namun pilihan lain adalah menggunakan
decimal
modul:sumber