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

问题描述 投票:14回答:4

[当我使用numpy.shape()检查数组的形状时,有时会出现(length,1),有时会出现(length,)。看起来区别在于列向量与行向量...但似乎并没有改变数组本身[除了某些函数在传递形状为(length,1)的数组时会抱怨某些函数。

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

python arrays math numpy
4个回答
8
投票

重点是说向量可以看作是

  • 向量
  • 只有一列的矩阵
  • 第2维和第3维的长度为1的3维数组
  • ...

您可以使用[:, 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,)

5
投票

在Python中,(length,)是一个元组,只有一个1。 (length)只是一个数字的括号。

numpy中,数组可以具有任意数量的维,分别为0、1、2等。您要问的是1维和2维对象之间的差异。 (length,1)是2项元组,为您提供2d数组的尺寸。

如果您习惯使用MATLAB,那么可能会感到困惑,因为那里所有数组都是二维或更大的。


2
投票

(length)数组是一个数组,其中每个元素都是一个数字,并且数组中有length个元素。 (length,1)数组是一个也具有length元素的数组,但是每个元素本身都是具有单个元素的数组。例如,以下使用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,)

0
投票

Python中的向量实际上是一个two维数组。行数是1(对于行向量),或者列数是1(对于列向量)只是一个巧合。

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

© www.soinside.com 2019 - 2024. All rights reserved.