[解決済み] Python NumPyで次元と軸とは何ですか?
質問
Pythonでコーディングしています。
NumPy
モジュールでコーディングしています。 3次元空間におけるある点の座標が
[1, 2, 1]
と記述されている場合、それは3次元、3軸、3つのランクになるのではないでしょうか? あるいは、それが1次元であるならば、点ではなく、点(複数形)であるべきではないでしょうか?
ここにドキュメントがあります。
Numpyでは次元のことを軸と呼びます。軸の数はランクです。 例えば、3次元空間の点の座標[1, 2, 1]は、軸が1つなのでランク1の配列となります。その軸の長さは 3.
出典 http://wiki.scipy.org/Tentative_NumPy_Tutorial
どのように解決するのですか?
numpyでは
array
の次元数です。
axes
の数であって、幾何学的な空間の次元ではありません。 例えば、3次元空間の点の位置を2次元配列で記述することができます。
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
というのは
shape
の
(4, 3)
と次元
2
. しかし,3次元空間を記述することができるのは,各行の長さ (
axis
1) が3つなので、各行が点の位置の x, y, z 成分になることができる。 の長さは
axis
0は点の数(ここでは4)を示しています。 しかし、これはどちらかというとコードが記述している数学への応用であって、配列そのものの属性ではありません。 数学では、ベクトルの次元はその長さ(例えば、3次元ベクトルのx、y、z成分)でしょうが、numpyでは、どんな"vector"も実際には長さの異なる1次元配列とみなされるだけなのです。 配列は、記述される空間(もしあれば)の次元が何であるかは気にしません。
これで遊んで、次元数と配列の形状を見ることができます。
In [262]: a = np.arange(9)
In [263]: a
Out[263]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [264]: a.ndim # number of dimensions
Out[264]: 1
In [265]: a.shape
Out[265]: (9,)
In [266]: b = np.array([[0,0,0],[1,2,3],[2,2,2],[9,9,9]])
In [267]: b
Out[267]:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
In [268]: b.ndim
Out[268]: 2
In [269]: b.shape
Out[269]: (4, 3)
配列は多くの次元を持つことができますが、2つか3つ以上になると視覚化するのが難しくなります。
In [276]: c = np.random.rand(2,2,3,4)
In [277]: c
Out[277]:
array([[[[ 0.33018579, 0.98074944, 0.25744133, 0.62154557],
[ 0.70959511, 0.01784769, 0.01955593, 0.30062579],
[ 0.83634557, 0.94636324, 0.88823617, 0.8997527 ]],
[[ 0.4020885 , 0.94229555, 0.309992 , 0.7237458 ],
[ 0.45036185, 0.51943908, 0.23432001, 0.05226692],
[ 0.03170345, 0.91317231, 0.11720796, 0.31895275]]],
[[[ 0.47801989, 0.02922993, 0.12118226, 0.94488471],
[ 0.65439109, 0.77199972, 0.67024853, 0.27761443],
[ 0.31602327, 0.42678546, 0.98878701, 0.46164756]],
[[ 0.31585844, 0.80167337, 0.17401188, 0.61161196],
[ 0.74908902, 0.45300247, 0.68023488, 0.79672751],
[ 0.23597218, 0.78416727, 0.56036792, 0.55973686]]]])
In [278]: c.ndim
Out[278]: 4
In [279]: c.shape
Out[279]: (2, 2, 3, 4)
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Numpy配列の次元
-
[解決済み] pandasのaxisとはどういう意味ですか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?