我正在经历NumPy documentation,我无法理解一点。它提到,对于下面的例子,数组具有等级2(它是2维的)。第一维(轴)的长度为2,第二维的长度为3。
[[ 1., 0., 0.],
[ 0., 1., 2.]]
第一个维度(轴)的长度是2?
修改 我混淆的原因是文档中的以下声明。
3D空间[1,2,1]中的点的坐标是等级数组 1,因为它有一个轴。该轴的长度为3。
在原始的2D ndarray中,我假设列表的数量标识了排名/维度,我错误地认为每个列表的长度表示每个维度的长度(按此顺序)。因此,根据我的理解,第一个维度的长度应为3,因为第一个列表的长度为3.
答案 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.]])