2014-03-29 133 views
9

当我使用numpy.shape()检查数组的形状时,我有时会得到(length,1),有时会得到(length,)。它看起来像是一个列与行向量......不过,它似乎并没有改变任何有关数组本身[除了一些函数抱怨,当我通过形状(length,1)]数组。一维阵列形状(长度,)与(长度,1)与(长度)

这两者有什么区别?
为什么形状不正好,(length)

回答

5

的要点是,说的载体可以看出无论是作为

  • 矢量
  • 仅带有一列的矩阵
  • 3维阵列,其中所述第二和第三维具有全长
  • ...

你可使用np.squeeze添加使用[:, np.newaxis]语法或尺寸下降尺寸:

>>> 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,) 
+0

它是明确的'列',而不是一排? (也就是说它可以被看作'有一行的矩阵'吗?) – DilithiumMatrix

+1

@zhermes'xs [:,np.newaxis]'是一列矩阵,'xs [np.newaxis,:]'是一行矩阵 –

2

(长度)数组是一个数组,其中每个元素是一个数字,并且数组中有长度元素。 (length,1)数组是一个也有长度元素的数组,但每个元素本身都是一个具有单个元素的数组。例如,以下使用长度= 3。

>>> import numpy as np 
>>> a = np.array([[1],[2],[3]]) 
>>> a.shape 
>>> (3, 1) 
>>> b = np.array([1,2,3]) 
>>> b.shape 
>>> (3,) 
5

在Python,(length,)是一个元组,一个1个项目。 (length)只是围绕数字的括号。

numpy中,数组可以具有任意数量的维数0,1,2等。您正在询问1维和2维对象之间的区别。 (length,1)是一个2元组元组,给出了2d数组的维数。

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

+0

什么是零维数组的例子? – Sarang

+1

'np.array(1)'。 Shape是'()','ndim'是0。 – hpaulj