在Python NumPy中,什么是维度和轴?

xfb7svmp  于 2022-12-13  发布在  Python
关注(0)|答案(7)|浏览(187)

我正在编写Python的NumPy模块。如果一个点在三维空间中的坐标被描述为[1, 2, 1],那它不应该是三维,三个轴,三个秩吗?或者如果它是一维,那么它不应该是点(复数),而不是点吗?
文档如下:
在Numpy中,维度被称为轴,轴的数量是秩。例如,3D空间[1,2,1]中一个点的坐标是秩为1的数组,因为它有一个轴,该轴的长度为3。
来源:Link

gt0wga4j

gt0wga4j1#

在numpy array s中,维数是指索引axes所需的axes的数目,而不是任何几何空间的维数。例如,您可以使用2D数组来描述3D空间中的点的位置:

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

它有(4, 3)shape2的维数。但它可以描述三维空间,因为每行的长度(axis 1)为3,因此每行可以是点位置的x、y和z分量。axis 0的长度表示点数(这里是4)。然而,这更多的是对代码所描述的数学的应用,而不是数组本身的属性。在数学中,向量的维数是它的长度(例如,三维向量的x、y和z分量),但在numpy中,任何“向量”实际上都只是被认为是长度可变的一维数组,数组并不关心所描述的空间(如果有的话)的维数是多少。
你可以试试看,看看数组的维数和形状,如下所示:

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)

数组可以有许多维度,但如果超过两个或三个维度,就很难可视化:

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)
nhn9ugyo

nhn9ugyo2#

如果有人需要这种视觉描述:

rpppsulh

rpppsulh3#

只需粘贴此answer的部分答案:
在Numpy中,尺寸形状是相关的,有时是相似的概念:

In [1]: import numpy as np

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

尺寸

Mathematics/Physics 中,dimension或dimensionality被非正式地定义为指定空间中任意点所需的最小坐标数,但在 Numpy 中,根据Numpy文档,它与axis/axis是一样的:
在Numpy中,维被称为轴,轴的数目是秩。

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

在Numpy中索引arraynth 坐标。多维数组的每个轴可以有一个索引。

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
0wi1tuuw

0wi1tuuw4#

它的等级为1,因为您需要一个索引来索引它。该轴的长度为3,作为索引,它可以取三个不同的值:v[i], i=0..2 .

ua4mk5z4

ua4mk5z45#

您也可以在群组操作中使用 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])
y1aodyip

y1aodyip6#

这就是我对它的理解。一个点是一个1D对象。你只能定义它的位置。它没有维度。一条线或一个面是一个2D对象。你可以分别通过它的位置和长度或面积来定义它,例如矩形、正方形、圆形。一个体积是一个3D对象。你可以通过它的位置、表面积/长度和体积来定义它,例如球体、立方体。
由此,您将通过单个轴(维度)在NumPy中定义一个点,而不管您使用的数学轴的数量。对于x和y轴,一个点定义为[2,4],对于x、y和z轴,一个点定义为[2,4,6]。这两个轴都是点,因此是1D。
要定义一条线,需要两个点。这需要将点“嵌套”到第二维中因此,可以仅使用x和y作为[[2,4],[6,9]]或者使用x、y和z作为[[2,4,6],[6,9,12]]来定义线。对于表面,将简单地需要更多的点来描述它,但仍然是2D对象。例如,三角形需要3个点,而矩形/正方形需要4个点。
一个体积需要4个(四面体)或更多的点来定义它,但仍然保持点到第三维(3D)的“嵌套”。

kadbb459

kadbb4597#

为了理解维度和轴,理解Tensor及其秩是很重要的。向量是秩为1的Tensor,矩阵是秩为2的Tensor,依此类推。考虑以下内容:

x = np.array([0,3,4,5,8])

现在x是一个向量,因此是秩-1Tensor。但是向量本身是5维的。在numpy rank=dimension=axis中。与传统的维数定义略有偏差,对于上面所示的向量,维数是5。因此,最好坚持使用秩或轴,并使用传统意义上的维数。

相关问题