一维数组形状(长度)与(长度,1)对比(长度)

时间:2014-03-29 21:15:18

标签: python arrays math numpy

当我使用numpy.shape()检查数组的形状时,有时会得到(length,1),有时会(length,)。看起来差异是列与行向量...但它似乎没有改变关于数组本身的任何内容[除了一些函数在我传递形状为(length,1)的数组时抱怨]。

这两者有什么区别?
为什么形状不仅仅是(length)

4 个答案:

答案 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(对于列向量)只是一个巧合。

相反,一维数组不是矢量(行矢量和列矢量都不是)。要理解这一点,请考虑几何学中的一个标量概念。标量仅具有一个数字属性。相反,向量具有两个属性,数量和方向。幸运的是,在线性代数中,矢量也具有“方向”,尽管只有两个可能的方向-水平或垂直(与几何中无限可能的方向不同)。一维数组仅具有数字含义-它没有显示此数组指向的方向。这就是为什么我们需要二维数组来描述向量的原因。