Numpy:newaxisまたはNoneを使用する必要がありますか?


91

numpyでは、スライス構文で 'newaxis'オブジェクトを使用して、長さが1の軸を作成できます。例:

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

ドキュメントの状態 1にも使用することができますNone代わりにnewaxis、効果はまったく同じです。

どちらかを選択する理由はありますか?一般的な好みやスタイルガイドはありますか?私の印象はnewaxis、おそらくそれがよりはっきりしているためか、より人気があります。では、なぜNone許可されるのですか?

回答:


103

Nonenumpy.newaxis単にのエイリアスなので、許可されNoneます。

In [1]: import numpy

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

著者は、便利な定数が必要であり、None利用可能だったため、おそらくそれを選択しました。

あなたが好むすべき理由についてはnewaxisオーバーNone:主に、それはより明確だから、それはだ、と一部いつかので、numpy著者は、以外の何かにそれを変更する場合がありますNone。(彼らは計画しておらず、おそらく計画もしていませんが、好む理由はありませんNone。)


おかげで、np.newaxisが実際にはNoneであることに気づかなかった。私はそのときnewaxisで行きます。
nikow 2009年

7
ただし、実際にはNoneを使用できると言っているため、変更することはできません。「newaxisオブジェクトは、上記の基本的なスライス構文で使用できます。newaxisの代わりにNoneを使用することもできます。」
endolith

5
また、numpyインデックスの詳細に不慣れな人と作業する場合、 "None"で逆参照されている配列を見ると、彼らは気が狂っているようです
Peter

1
None実行速度の最適化が優れている1つの場所は、時間のメリットが非常に小さいことです。しかし、通常は好むはずnp.newaxisです。
-godaygo

2
なぜ彼らが使用しなかったのnewaxis = object()か(またはCレベルの同等物)は私を超えています...使用Noneはかなりエラーが発生しやすくなります。バグのある関数(returnブール配列を返すはずのベア)があり、形状の不一致が原因でエラーが発生し始めました。でのインデックス付けNoneは単にを上げるだけではないことを理解するのにしばらく時間がかかりましたIndexError。彼らが「新しい」センチネル値を使用していた場合、エラーを理解しようとする30分間は避けました...
ジャコモアルゼッタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.