当我使用numpy.shape()
检查数组的形状时,有时会得到(length,1)
,有时会(length,)
。看起来差异是列与行向量...但它似乎没有改变关于数组本身的任何内容[除了一些函数在我传递形状为(length,1)
的数组时抱怨]。
这两者有什么区别?
为什么形状不仅仅是(length)
?
答案 0 :(得分:7)
重点是说矢量可以看作是
您可以使用[:, np.newaxis]
语法添加维度,或使用np.squeeze
删除维度:
>>> xs = np.array([1, 2, 3, 4, 5])
>>> xs.shape
(5,)
>>> xs[:, np.newaxis].shape # a matrix with only one column
(5, 1)
>>> xs[np.newaxis, :].shape # a matrix with only one row
(1, 5)
>>> xs[:, np.newaxis, np.newaxis].shape # a 3 dimensional array
(5, 1, 1)
>>> np.squeeze(xs[:, np.newaxis, np.newaxis]).shape
(5,)
答案 1 :(得分:5)
在Python中,(length,)
是一个元组,只有一个项目。 (length)
只是一个数字的括号。
在numpy
中,数组可以包含任意数量的维度,0,1,2等。您要问的是1维和2维对象之间的区别。 (length,1)
是一个2项元组,为您提供2d数组的维度。
如果您习惯使用MATLAB,可能会因为所有数组都是2维或更大而感到困惑。
答案 2 :(得分:2)
(length,)数组是一个数组,其中每个元素都是数字,并且数组中有长度元素。 (length,1)数组是一个也有长度元素的数组,但每个元素本身都是一个带有单个元素的数组。例如,以下使用length = 3。
>>> import numpy as np
>>> a = np.array( [[1],[2],[3]] )
>>> a.shape
>>> (3, 1)
>>> b = np.array( [1,2,3] )
>>> b.shape
>>> (3,)
答案 3 :(得分:0)
Python中的向量实际上是一个二维数组。行数是1(对于行向量)或列数是1(对于列向量)只是一个巧合。
相反,一维数组不是矢量(行矢量和列矢量都不是)。要理解这一点,请考虑几何学中的一个标量概念。标量仅具有一个数字属性。相反,向量具有两个属性,数量和方向。幸运的是,在线性代数中,矢量也具有“方向”,尽管只有两个可能的方向-水平或垂直(与几何中无限可能的方向不同)。一维数组仅具有数字含义-它没有显示此数组指向的方向。这就是为什么我们需要二维数组来描述向量的原因。