了解NumPy中的轴

时间:2017-10-20 19:08:54

标签: python numpy

我正在经历NumPy documentation,我无法理解一点。它提到,对于下面的例子,数组具有等级2(它是2维的)。第一维(轴)的长度为2,第二维的长度为3。

 [[ 1., 0., 0.],
 [ 0., 1., 2.]]

第一个维度(轴)的长度是2?

修改 我混淆的原因是文档中的以下声明。

  

3D空间[1,2,1]中的点的坐标是等级数组   1,因为它有一个轴。该轴的长度为3。

在原始的2D ndarray中,我假设列表的数量标识了排名/维度,我错误地认为每个列表的长度表示每个维度的长度(按此顺序)。因此,根据我的理解,第一个维度的长度应为3,因为第一个列表的长度为3.

4 个答案:

答案 0 :(得分:1)

您可能会将另一句话与下面的图片示例混淆。可以这样想:Rank = number of lists in the list(array)并且您的问题中的术语长度可以被认为是length = the number of 'things' in the list(array)

我认为他们试图向您描述shape的定义,在这种情况下(2,3)

在那篇文章中我认为关键句在这里:

  

在NumPy维度中称为轴。轴数是等级。

答案 1 :(得分:1)

numpy中,轴排序遵循zyx惯例,而不是通常的(可能更直观)xyz

从视觉上看,这意味着对于水平轴为x且垂直轴为y的2D阵列:

    x -->
y      0   1   2
|  0 [[1., 0., 0.],
V  1  [0., 1., 2.]]

此数组的shape(2, 3),因为它的排序为(y, x),第一个轴y的长度为2

用切片验证这一点:

import numpy as np

a = np.array([[1, 0, 0], [0, 1, 2]], dtype=np.float)

>>> a
Out[]:
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  2.]])

>>> a[0, :]                    # Slice index 0 of first axis
Out[]: array([ 1.,  0.,  0.])  # Get values along second axis `x` of length 3

>>> a[:, 2]                    # Slice index 2 of second axis
Out[]: array([ 0.,  2.])       # Get values along first axis `y` of length 2

答案 2 :(得分:0)

如果你打印numpy数组

print(np.array([[ 1.  0.  0.],[ 0.  1.  2.]])

您将获得以下输出

#col1 col2 col3
[[ 1.  0.  0.]  # row 1
[ 0.  1.  2.]] #  row 2

将其视为2乘3矩阵... 2行3列。它是一个二维数组,因为它是一个列表列表。 ([[起初是暗示它的2d))。

2d numpy数组

np.array([[ 1.  0., 0., 6.],[ 0.  1.  2., 7.],[3.,4.,5,8.]]) 

将打印为

#col1 col2 col3 col4
[[ 1.  0. , 0., 6.]  # row 1
[ 0.  1. , 2., 7.] #  row 2
[3.,  4. , 5., 8.]] # row 3

这是一个3乘4 2d阵列(3行,4列)

答案 3 :(得分:0)

第一个尺寸是长度:

In [11]: a = np.array([[ 1., 0., 0.], [ 0., 1., 2.]])

In [12]: a
Out[12]:
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  2.]])

In [13]: len(a)  # "length of first dimension"
Out[13]: 2

第二个是每个"行"的长度:

In [14]: [len(aa) for aa in a]  # 3 is "length of second dimension"
Out[14]: [3, 3]

许多numpy函数将axis作为参数,例如,您可以对轴求和:

In [15]: a.sum(axis=0)
Out[15]: array([ 1.,  1.,  2.])

In [16]: a.sum(axis=1)
Out[16]: array([ 1.,  3.])

需要注意的是,你可以拥有更高维度的数组:

In [21]: b = np.array([[[1., 0., 0.], [ 0., 1., 2.]]])

In [22]: b
Out[22]:
array([[[ 1.,  0.,  0.],
        [ 0.,  1.,  2.]]])

In [23]: b.sum(axis=2)
Out[23]: array([[ 1.,  3.]])