Ketika saya mencetak array numpy, saya mendapatkan representasi terpotong, tetapi saya ingin array penuh.
Apakah ada cara untuk melakukan ini?
Contoh:
>>> numpy.arange(10000)
array([ 0, 1, 2, ..., 9997, 9998, 9999])
>>> numpy.arange(10000).reshape(250,40)
array([[ 0, 1, 2, ..., 37, 38, 39],
[ 40, 41, 42, ..., 77, 78, 79],
[ 80, 81, 82, ..., 117, 118, 119],
...,
[9880, 9881, 9882, ..., 9917, 9918, 9919],
[9920, 9921, 9922, ..., 9957, 9958, 9959],
[9960, 9961, 9962, ..., 9997, 9998, 9999]])
np.inf
?np.nan
dan'nan'
hanya bekerja dengan total kebetulan, dan'nan'
bahkan tidak bekerja di Python 3 karena mereka mengubah implementasi perbandingan tipe campuran yangthreshold='nan'
bergantung pada.threshold=np.nan
Daripada'nan'
tergantung pada kebetulan yang berbeda, yaitu bahwa logika pencetakan array membandingkan ukuran array dengan ambang batasa.size > _summaryThreshold
. Ini selalu kembaliFalse
untuk_summaryThreshold=np.nan
. Jika perbandingan telaha.size <= _summaryThreshold
, menguji apakah array harus sepenuhnya dicetak alih-alih menguji apakah harus diringkas, ambang ini akan memicu peringkasan untuk semua array.)tmp
sajalist(tmp)
. Opsi lain dengan pemformatan berbeda adalahtmp.tolist()
atau untuk kontrol lebih besarprint("\n".join(str(x) for x in tmp))
.Jawaban:
Gunakan
numpy.set_printoptions
:sumber
numpy
array hanya sekali, sayangnya solusi ini memiliki kelemahan yang mengharuskan Anda untuk mereset perubahan konfigurasi ini setelah melakukan pencetakan.Saya menyarankan menggunakan
np.inf
daripadanp.nan
yang disarankan oleh orang lain. Keduanya berfungsi untuk tujuan Anda, tetapi dengan menetapkan ambang batas hingga "tak terbatas" jelas bagi semua orang yang membaca kode Anda apa yang Anda maksudkan. Memiliki ambang "bukan angka" tampaknya agak kabur bagi saya.sumber
np.set_printoptions(threshold=1000)
akan mengembalikannya ke perilaku default. Tetapi Anda dapat mengatur ambang ini serendah atau setinggi yang Anda suka.np.set_printoptions(threshold=np.inf)
cukup ubah ukuran maksimum array cetak sebelum menjadi terpotong hingga tak terbatas, sehingga tidak pernah terpotong tidak peduli seberapa besar. Jika Anda menetapkan ambang batas ke angka sebenarnya maka itu akan menjadi ukuran maksimum.np.inf
,np.nan
, atau'nan'
. Apa pun yang Anda letakkan di sana, NumPy masih akan menggunakan dataran>
untuk membandingkan ukuran array dengan ambang Anda.np.nan
hanya bekerja karena itua.size > _summaryThreshold
bukana.size <= _summaryThreshold
, dannp.nan
kembaliFalse
untuk semua>
/<
/>=
/<=
perbandingan.'nan'
hanya bekerja karena detail implementasi yang rapuh dari logika perbandingan tipe campuran Python 2; itu benar-benar rusak pada Python 3.np.get_printoptions()['threshold']
. Anda dapat menyimpan nilai ini sebelum menetapkan ambang batas dan kemudian mengembalikannya setelah itu (atau menggunakanwith
blok seperti yang disarankan dalam jawaban lain).Jawaban sebelumnya adalah yang benar, tetapi sebagai alternatif yang lebih lemah Anda dapat berubah menjadi daftar:
sumber
NumPy 1.15 atau lebih baru
Jika Anda menggunakan NumPy 1.15 (dirilis 2018-07-23) atau lebih baru, Anda dapat menggunakan
printoptions
manajer konteks:(tentu saja, ganti
numpy
dengannp
jika itu cara Anda mengimpornumpy
)Penggunaan manajer konteks (
with
-block) memastikan bahwa setelah manajer konteks selesai, opsi cetak akan kembali ke apa pun mereka sebelum blok dimulai. Ini memastikan pengaturan bersifat sementara, dan hanya diterapkan pada kode di dalam blok.Lihat
numpy.printoptions
dokumentasi untuk perincian tentang manajer konteks dan argumen apa yang didukungnya.sumber
Ini terdengar seperti Anda menggunakan numpy.
Jika demikian, Anda dapat menambahkan:
Itu akan menonaktifkan pencetakan sudut. Untuk informasi lebih lanjut, lihat Tutorial NumPy ini .
sumber
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Ini adalah satu-satunya cara untuk melakukan ini, yang berguna jika Anda tidak ingin mengubah pengaturan default Anda:
sumber
'nan'
,np.nan
atau apapun di atas. Ini tidak didukung, dan saran buruk ini menyebabkan rasa sakit bagi orang yang beralih ke python 3numpy.set_printoptions(threshold=numpy.inf)
Menggunakan manajer konteks sebagai Paul Price sugggested
sumber
np.printoptions
numpy.savetxt
atau jika Anda membutuhkan string:
Format output default adalah:
dan itu dapat dikonfigurasi dengan argumen lebih lanjut.
Perhatikan khususnya bagaimana ini juga tidak menunjukkan tanda kurung siku, dan memungkinkan banyak penyesuaian, seperti yang disebutkan di: Bagaimana cara mencetak array Numpy tanpa tanda kurung?
Diuji pada Python 2.7.12, numpy 1.11.1.
sumber
Ini adalah sedikit modifikasi (dihapus pilihan untuk melewati argumen tambahan untuk
set_printoptions)
dari neok s jawaban.Ini menunjukkan bagaimana Anda dapat menggunakan
contextlib.contextmanager
untuk membuat manajer konteks seperti itu dengan lebih sedikit baris kode:Dalam kode Anda dapat digunakan seperti ini:
sumber
try
/finally
diyield
dalam konteks manajer, sehingga pembersihan terjadi apa pun yang terjadi.with np.printoptions(threshold=np.inf):
Sebagai pelengkap jawaban ini dari jumlah kolom maksimum (dengan tetap
numpy.set_printoptions(threshold=numpy.nan)
), ada juga batas karakter yang akan ditampilkan. Di beberapa lingkungan seperti saat memanggil python dari bash (daripada sesi interaktif), ini bisa diperbaiki dengan mengatur parameterlinewidth
sebagai berikut.Dalam hal ini, jendela Anda harus membatasi jumlah karakter untuk membungkus garis.
Bagi mereka yang menggunakan teks luhur dan ingin melihat hasil dalam jendela output, Anda harus menambahkan opsi build
"word_wrap": false
ke file [ source ] sublime-build .sumber
Sejak NumPy versi 1.16, untuk lebih jelasnya lihat tiket GitHub 12251 .
sumber
Untuk mematikannya dan kembali ke mode normal
sumber
threshold=0
, yang berarti "potong sesegera mungkin" - bukan yang Anda inginkan sama sekali.Misalkan Anda memiliki array numpy
Jika Anda ingin mencetak array lengkap dengan cara satu kali (tanpa mengubah opsi np.set_print), tetapi menginginkan sesuatu yang lebih sederhana (lebih sedikit kode) daripada manajer konteks, lakukan saja
sumber
Sedikit modifikasi: (karena Anda akan mencetak daftar besar)
Ini akan menambah jumlah karakter per baris (garis-lebar default 75). Gunakan nilai apa pun yang Anda suka untuk linewidth yang sesuai dengan lingkungan pengkodean Anda. Ini akan menyelamatkan Anda dari keharusan untuk melalui sejumlah besar garis keluaran dengan menambahkan lebih banyak karakter per baris.
sumber
Anda dapat menggunakan
array2string
fungsi - docs .sumber
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Anda tidak akan selalu ingin semua item dicetak, terutama untuk array besar.
Cara sederhana untuk menampilkan lebih banyak item:
Ini berfungsi dengan baik ketika irisan array <1000 secara default.
sumber
Jika Anda memiliki panda yang tersedia,
menghindari efek samping yang memerlukan reset
numpy.set_printoptions(threshold=sys.maxsize)
dan Anda tidak mendapatkan numpy.array dan kurung. Saya menemukan ini nyaman untuk membuang berbagai ke dalam file logsumber
Jika array terlalu besar untuk dicetak, NumPy secara otomatis melompati bagian tengah array dan hanya mencetak sudut-sudut: Untuk menonaktifkan perilaku ini dan memaksa NumPy untuk mencetak seluruh array, Anda dapat mengubah opsi pencetakan menggunakan
set_printoptions
.atau
Anda juga dapat merujuk ke dokumentasi numpy dokumentasi numpy untuk "atau bagian" untuk bantuan lebih lanjut.
sumber
'nan'
,np.nan
atau apapun di atas. Ini tidak didukung, dan saran yang buruk ini menyebabkan rasa sakit bagi orang-orang yang beralih ke python 3ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation