Python NumPyでは、寸法と軸は何ですか?


82

PythonsNumPyモジュールでコーディングしています。3D空間内の点の座標がと記述されている[1, 2, 1]場合、それは3次元、3軸、ランク3ではないでしょうか。または、それが1つの次元である場合、それは点ではなく点(複数)であるべきではありませんか?

ドキュメントは次のとおりです。

Numpyでは、寸法は軸と呼ばれます。軸数はランクです。たとえば、3D空間[1、2、1]の点の座標は、軸が1つあるため、ランク1の配列です。その軸の長さは3です。

出典:http//wiki.scipy.org/Tentative_NumPy_Tutorial

回答:


97

numpy arraysではaxes、次元は、幾何学的空間の次元ではなく、インデックスを作成するために必要な数を指します。たとえば、2D配列を使用して3D空間内のポイントの位置を記述することができます。

array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

これは持っているshape(4, 3)と次元2。ただし、各行(axis1)の長さが3であるため、3D空間を記述することができます。したがって、各行は、ポイントの位置のx、y、およびzコンポーネントにすることができます。長さaxis0は、ポイントの数(ここでは4)を示します。ただし、これは、配列自体の属性ではなく、コードが記述している数学へのアプリケーションです。数学では、ベクトルの次元はその長さ(たとえば、3Dベクトルのx、y、z成分)になりますが、numpyでは、「ベクトル」は実際にはさまざまな長さの1d配列と見なされます。配列は、記述されているスペース(存在する場合)の次元が何であるかを気にしません。

これをいじって、次のように配列の次元数と形状を確認できます。

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)


9

インデックスを作成するには1つのインデックスが必要なため、ランク1です。その1つの軸の長さは3ですv[i], i=0..2。インデックスのインデックスとして、次の3つの異なる値をとることができます。


8

この回答から回答の一部を貼り付けるだけです:

Numpyでは、寸法軸/軸形状が関連しており、場合によっては同様の概念があります。

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

寸法

数学/物理学、寸法または次元非公式空間内の任意の点を指定するために必要な座標の最小数として定義されます。しかし、Numpyでは、numpy docによると、それはaxis / axesと同じです。

Numpyでは、寸法は軸と呼ばれます。軸数はランクです。

In [3]: a.ndim  # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2

軸/軸

n番目のインデックスにAN座標arraynumpyの中。また、多次元配列は、軸ごとに1つのインデックスを持つことができます。

In [4]: a[1,0]  # to index `a`, we specific 1 at the first axis and 0 at the second axis.
Out[4]: 3  # which results in 3 (locate at the row 1 and column 0, 0-based index)

形状

使用可能な各軸に沿ったデータの数を示します。

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data

5

グループ操作でaxisパラメーターを使用することもできます。axis= 0の場合、Numpyは各列の要素に対してアクションを実行し、axis = 1の場合、行に対してアクションを実行します。

test = np.arange(0,9).reshape(3,3)

Out[3]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

test.sum(axis=0)
Out[5]: array([ 9, 12, 15])

test.sum(axis=1)
Out[6]: array([ 3, 12, 21])

4

これが私がそれを理解する方法です。ポイントは1Dオブジェクトです。その位置のみを定義できます。寸法はありません。線またはサーフェスは2Dオブジェクトです。位置と長さまたは面積の両方でそれぞれ定義できます。たとえば、長方形、正方形、円ボリュームは3Dオブジェクトです。球、立方体など、その位置、表面積/長さ、および体積によって定義できます。

これから、使用する数学軸の数に関係なく、単一の軸(寸法)によってNumPyの点を定義します。x軸とy軸の場合、点は[2,4]として定義され、x、y、z軸の場合、点は[2,4,6]として定義されます。これらは両方ともポイントであるため、1Dです。

線を定義するには、2つのポイントが必要になります。これには、2次元(2D)へのポイントの何らかの形式の「ネスト」が必要になります。そのため、線はxとyを[[2,4]、[6,9]]としてのみ使用するか、x、yとzを[[2,4,6]、[6,9,12]として使用して定義できます。 ]]。サーフェスの場合、それを記述するためにより多くのポイントが必要になりますが、それでも2Dオブジェクトのままです。たとえば、三角形には3つのポイントが必要ですが、長方形/正方形には4つのポイントが必要です。

ボリュームは、それを定義するために4(四面体)以上のポイントを必要としますが、それでも3次元(3D)へのポイントの「ネスト」を維持します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.