非常に多くの場合、配列はnp.squeeze()
で圧縮されます。ドキュメントでは、なぜnp.squeeze()が必要ですか?
の形から1次元エントリを削除します。しかし
私はまだ思ったんだけど:なぜの形状でゼロと無次元のエントリがありますか?または、別の言い方をすると、なぜ両方ともa.shape = (2,1)
と(2,)
が存在するのですか?
非常に多くの場合、配列はnp.squeeze()
で圧縮されます。ドキュメントでは、なぜnp.squeeze()が必要ですか?
の形から1次元エントリを削除します。しかし
私はまだ思ったんだけど:なぜの形状でゼロと無次元のエントリがありますか?または、別の言い方をすると、なぜ両方ともa.shape = (2,1)
と(2,)
が存在するのですか?
2つのものの数学的な違いに加えて、予測可能性の問題があります。あなたの提案が守られれば、あなたのアレイの次元に依存することはできません。したがって、my_array[x,y]
という形式の式は、最初にmy_array
が2次元であるかどうかをチェックし、ある時点で暗黙的にsqueeze
を持っていないもので置き換える必要があります。これはおそらく明確に指定されたことを行う時折squeeze
よりもはるかにコードを難読化するでしょう。
実際には、どの軸が削除されているかを知ることは非常に難しく、新しい問題が発生する可能性があります。
The Zen of Pythonの趣旨では、Explicit is better than implicit
でも暗黙的な配列変換を明示的にsqueeze
と言います。
重要度の1つの例は、アレイを乗算する場合です。 2つの2次元配列は、一度に各値を掛ける。
>>> x = np.ones((2, 1))*2
>>> y = np.ones((2, 1))*3
>>> x.shape
(2,1)
>>> x*y
array([[ 6.],
[ 6.]])
あなたは2D配列によって1次元配列を掛けた場合、動作は第二に、あなたはまた、例えば、以前の寸法を圧迫することがあります
>>> z = np.ones((2,))*3
>>> x*z
array([[ 6., 6.],
[ 6., 6.]])
異なっていますa.shape =(1,2,2)からa.shape =(2,2)
従来のスタイルに固定 – benj