我正在使用Pythons NumPy
模块进行编码。如果3D空间中一个点的坐标被描述为[1, 2, 1]
,那么它不是三维,三个轴,三个等级?或者,如果这是一个维度,那么它不应该是点(复数),而不是点?
以下是文档:
在Numpy中,尺寸称为轴。轴数是等级。 例如,3D空间[1,2,1]中的点的坐标是等级1的数组,因为它具有一个轴。该轴的长度为 3。
答案 0 :(得分:77)
在numpy array
中,维度是指索引它所需的axes
的数量,而不是任何几何空间的维度。例如,您可以使用2D数组描述3D空间中点的位置:
array([[0, 0, 0],
[1, 2, 3],
[2, 2, 2],
[9, 9, 9]])
其shape
(4, 3)
和尺寸2
。但它可以描述3D空间,因为每行的长度(axis
1)是3,因此每行可以是点位置的x,y和z分量。 axis
0的长度表示点数(此处为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)
阵列可以有很多维度,但它们很难在两三个之上可视化:
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)
答案 1 :(得分:18)
答案 2 :(得分:8)
它是排名第一,因为你需要一个索引来索引它。一个轴的长度为3,因为索引索引可以采用三个不同的值:v[i], i=0..2
。
答案 3 :(得分:6)
只需粘贴此answer的部分答案:
在Numpy中,维度,轴/轴,形状是相关的,有时也是类似的概念:
In [1]: import numpy as np
In [2]: a = np.array([[1,2],[3,4]])
在数学/物理中,维度或维度被非正式地定义为指定空间中任何点所需的最小坐标数。但是在 Numpy 中,根据numpy doc,它与轴/轴相同:
在Numpy中,尺寸称为轴。轴数是等级。
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2
nth 坐标,用于索引Numpy中的array
。多维数组每个轴可以有一个索引。
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
答案 4 :(得分:3)
您也可以在组操作中使用 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])
答案 5 :(得分:1)
这就是我理解的方式。 一个点是一维对象。您只能定义其位置。它没有尺寸。 线或曲面是2D对象。您可以分别通过其位置和长度或面积来定义它,例如矩形,正方形,圆形 卷是3D对象。您可以通过其位置,表面积/长度和体积来定义它,例如球体,立方体。
由此,无论您使用的数学轴的数量如何,您都将通过单个轴(尺寸)在NumPy中定义一个点。对于x和y轴,点定义为[2,4],对于x,y和z轴,点定义为[2,4,6]。这两个都是积分,因此是1D。
要定义一条线,需要两点。这将需要某种形式的嵌套'点到第二维(2D)。因此,可以使用x和y将线定义为[[2,4],[6,9]]或使用x,y和z作为[[2,4,6],[6,9,12] ]。 对于曲面,它只需要更多的点来描述它,但仍然是2D对象。例如,三角形需要3个点,而矩形/正方形需要4个。
一个体积将需要4个(四面体)或更多点来定义它,但仍然保持“嵌套”#39;点到第三维(3D)。
答案 6 :(得分:0)
为了理解维度和轴,了解张量及其秩很重要。向量是 1 阶张量,矩阵是 2 阶张量,依此类推。 考虑以下几点:
x = np.array([0,3,4,5,8])
现在 x 是一个向量,因此是一个秩为 1 的张量。但是向量本身是 5 维的。在 numpy rank=dimension=axis 中。与传统的维度定义略有偏差,上面显示的向量为 5。因此,最好坚持使用秩或轴,并使用传统意义上的维度。