2013-08-10 14 views
5
>>> print np.array([np.arange(10)]).transpose() 

[[0] 
[1] 
[2] 
[3] 
[4] 
[5] 
[6] 
[7] 
[8] 
[9]] 

Gibt es eine Möglichkeit, einen vertikalen Bereich zu erhalten, ohne diese zusätzlichen Schritte durchlaufen zu müssen?Wie erstellen Sie einen numpigen vertikalen Bereich?

+0

Sie machen bereits einige unnötige Schritte dort - die 'np.array()' und die '[]' sind unnötig, da 'np.arange' ein numpy Array zurückgibt. Sie können einfach 'np.arange (10) .transpose()' – Brionius

+3

@Brionius, 'transpose' eines 1d-Arrays nichts tun. Das OP verwendet die '[]', um dem Array eine zusätzliche Dimension hinzuzufügen und fragt, ob es einen effizienteren Weg gibt, dasselbe Ergebnis zu erzielen. –

+0

@BiRico Ah, du hast Recht, mein Fehler. – Brionius

Antwort

14

können Sie np.newaxis verwenden:

>>> np.arange(10)[:, np.newaxis] 
array([[0], 
     [1], 
     [2], 
     [3], 
     [4], 
     [5], 
     [6], 
     [7], 
     [8], 
     [9]]) 

np.newaxis ist nur ein Alias ​​für None, und wurde von numpy Entwickler vor allem zur besseren Lesbarkeit hinzugefügt. Daher würde np.arange(10)[:, None] das gleiche genaue Ergebnis wie die obige Lösung ergeben.

+0

nur hinzuzufügen, die Weitergabe von 'None' anstelle von' np.newaxis' hat den gleichen Effekt ... –

+0

können Sie auf einige Dokumente verweisen, die erklären, warum das funktioniert? –

+0

@SaulloCastro, danke ich wusste das nicht. – Akavall

10

ich tun würde:

np.arange(10).reshape((10, 1)) 

Im Gegensatz zu np.array, neu zu gestalten ist eine leichte Operation, die die Daten nicht in dem Array kopiert.

+8

Als Randnotiz können Sie auch' whatever.reshape (-1, 1) 'eingeben, um die Größe der ersten Dimension nicht angeben zu müssen. –

Verwandte Themen