Numpy: newaxis veya None kullanmalı mıyım?


91

Numpy'de, dilimleme sözdiziminde 'newaxis' nesnesi bir uzunlukta eksen oluşturmak için kullanılabilir, örneğin:

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

Belgelerine durumları biri de kullanabileceği Noneyerine newaxis, etkisi tam olarak aynıdır.

Birini diğerine tercih etmek için herhangi bir sebep var mı? Herhangi bir genel tercih veya stil rehberi var mı? Benim izlenimim newaxis, muhtemelen daha açık olduğu için daha popüler olduğu yönünde . Öyleyse Noneizin verilmesinin herhangi bir nedeni var mı?

Yanıtlar:


103

Noneizin verilir çünkü numpy.newaxisyalnızca bir takma addır None.

In [1]: import numpy

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

Yazarlar muhtemelen bunu uygun bir sabite ihtiyaç duydukları ve Nonemevcut olduğu için seçtiler .

Tercih neden gelince newaxisüzerinde None: daha açık olduğu için ağırlıklı olarak bu kadar ve kısmen birgün çünkü numpyyazarlar dışında bir şeyle değiştirmek olabilir None. (Planlamıyorlar ve muhtemelen yapmayacaklar, ancak tercih etmek için iyi bir neden yok None.)


Teşekkürler, np.newaxis'in aslında Yok olduğunu fark etmemiştim. O zaman newaxis ile gideceğim.
nikow

7
Aslında Yok'u kullanabileceğinizi söylüyorlar, bu yüzden şimdi değiştiremezler: "newaxis nesnesi yukarıda tartışılan temel dilimleme sözdiziminde kullanılabilir. Newaxis yerine hiçbiri de kullanılabilir."
endolith

5
Ayrıca, uyuşuk indekslemenin ayrıntılarına aşina olmayan insanlarla çalışıyorsanız, dizilerin "Yok" tarafından atıfta bulunulduğunu gördüklerinde çıldırıyor gibi görünüyorlar
Peter

1
NoneDaha iyi olduğu bir yer , yürütme hızının optimizasyonudur, çok küçük bir zaman avantajı sağlayabilir. Ama genellikle tercih etmelisiniz np.newaxis.
godaygo

2
Neden kullanmadıkları newaxis = object()(veya C seviyesindeki eşdeğeri) beni aşıyor ... kullanmak Noneoldukça hatalara açık. Hata içeren bir işlevim vardı ( returnboole dizisini döndürmesi gereken bir çıplak ) ve şekil uyumsuzluğu nedeniyle hatalar almaya başladım. İle indekslemenin Nonebir IndexError. "Yeni" bir gözcü değeri kullanmış olsalardı, hatayı anlamaya çalışmaktan 30 dakika
kaçınırdım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.