Numpy: Haruskah saya menggunakan sumbu baru atau Tidak ada?

91

Dalam numpy seseorang dapat menggunakan objek 'sumbu baru' dalam sintaksis slicing untuk membuat sumbu dengan panjang satu, misalnya:

import numpy as np
print np.zeros((3,5))[:,np.newaxis,:].shape
# shape will be (3,1,5)

The negara dokumentasi yang satu juga dapat menggunakan Nonebukan newaxis, efeknya adalah persis sama.

Apakah ada alasan untuk memilih salah satu dari yang lain? Apakah ada preferensi umum atau panduan gaya? Kesan saya newaxislebih populer, mungkin karena lebih eksplisit. Jadi adakah alasan kenapa Nonediijinkan?

nikow
sumber

Jawaban:

103

Nonediizinkan karena numpy.newaxishanyalah alias untuk None.

In [1]: import numpy

In [2]: numpy.newaxis is None
Out[2]: True

Penulis mungkin memilihnya karena mereka membutuhkan konstanta yang nyaman, dan Nonetersedia.

Adapun mengapa Anda harus memilih newaxislebih None: terutama karena itu lebih eksplisit, dan sebagian karena suatu hari nanti numpypenulis mungkin mengubahnya menjadi sesuatu selain None. (Mereka tidak berencana, dan mungkin tidak, tapi tidak ada alasan bagus untuk memilih None.)

AFoglia
sumber
Terima kasih, saya tidak memperhatikan bahwa np.newaxis sebenarnya adalah None. Saya akan pergi dengan sumbu baru.
nikow
7
Mereka sebenarnya mengatakan Anda dapat menggunakan None, jadi mereka tidak dapat mengubahnya sekarang: "Objek sumbu baru dapat digunakan dalam sintaksis dasar yang dibahas di atas. Tidak ada juga yang dapat digunakan sebagai pengganti sumbu baru."
endolith
5
Juga jika Anda bekerja dengan orang-orang yang tidak terbiasa dengan detail pengindeksan numpy, mereka tampaknya menjadi gila saat melihat array yang dirujuk oleh "Tidak Ada"
Peter
1
Salah satu tempat Noneyang lebih baik adalah optimalisasi kecepatan eksekusi, yang dapat memberikan manfaat waktu yang sangat kecil. Tetapi biasanya Anda harus memilih np.newaxis.
godaygo
2
Mengapa mereka tidak menggunakan newaxis = object()(atau yang setara dengan level C) berada di luar jangkauan saya ... penggunaan Nonecukup rawan kesalahan. Saya memiliki fungsi dengan bug (telanjang returnyang seharusnya mengembalikan array boolean) dan saya mulai mendapatkan kesalahan karena ketidakcocokan bentuk. Butuh beberapa saat bagi saya untuk menyadari bahwa pengindeksan dengan Nonetidak hanya meningkatkan IndexError. Jika mereka menggunakan nilai sentinel "segar", saya menghindari 30 menit untuk mencoba memahami kesalahan ...
Giacomo Alzetta