2014-03-29 18 views
9

Wenn ich die Form eines Arrays mit numpy.shape() überprüfe, bekomme ich manchmal (length,1) und manchmal (length,). Es sieht so aus, als ob der Unterschied zwischen einem Spalten- und einem Zeilenvektor besteht ... aber das ändert nichts an dem Array selbst [außer dass einige Funktionen sich beschweren, wenn ich ein Array mit der Form (length,1) übergebe].eindimensionale Array Shapes (Länge,) vs. (Länge 1) vs. (Länge)

Was ist der Unterschied zwischen diesen beiden?
Warum ist nicht gerade die Form, (length)?

Antwort

5

Der Punkt ist, dass ein Vektor sagen gesehen werden kann, entweder als

  • ein Vektor
  • eine Matrix mit nur einer Spalte
  • ein 3-dimensionales Array, wo die 2. und 3. Dimensionen Länge eines
  • ...

Sie Verwendung [:, np.newaxis] Syntax oder Tropfenabmessungen können Dimensions np.squeeze Verwendung:

>>> 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

Ist es explizit eine "Spalte" und keine Zeile? (dh kann es als 'eine Matrix mit einer Reihe' gesehen werden?) – DilithiumMatrix

+1

@zhermes 'xs [:, np.newaxis]' ist einspaltige Matrix, 'xs [np.newaxis,:]' ist einreihige Matrix –

2

Das Array (length,) ist ein Array, bei dem jedes Element eine Zahl ist und im Array Längenelemente vorhanden sind. Das Array (length, 1) ist ein Array, das ebenfalls length-Elemente enthält, aber jedes Element selbst ist ein Array mit einem einzelnen Element. Im Folgenden wird beispielsweise length = 3 verwendet.

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

In Python, (length,) ein Tupel ist, mit einem Element 1. (length) ist nur eine runde Klammer um eine Zahl.

In numpy kann ein Array eine beliebige Anzahl von Dimensionen haben, 0, 1, 2 usw. Sie fragen nach dem Unterschied zwischen 1 und 2 dimensionalen Objekten. (length,1) ist ein 2-Item-Tupel, das Ihnen die Dimensionen eines 2D-Arrays gibt.

Wenn Sie daran gewöhnt sind, mit MATLAB zu arbeiten, könnten Sie durch die Tatsache verwirrt sein, dass dort alle Arrays zweidimensional oder größer sind.

+0

Was wäre ein Beispiel für ein Zero-Dimension-Array? – Sarang

+1

'np.array (1)'. Shape ist '()' und 'ndim' ist 0. – hpaulj