1. ホーム
  2. python

[解決済み] Python NumPyで次元と軸とは何ですか?

2023-05-25 16:05:08

質問

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)