Numpy Array-Abmessungen

367

Ich versuche gerade, Numpy und Python zu lernen. Gegeben das folgende Array:

import numpy as np
a = np.array([[1,2],[1,2]])

Gibt es eine Funktion, die die Dimensionen von zurückgibt a(ega ist ein 2 x 2-Array)?

size() gibt 4 zurück und das hilft nicht viel.

Morgan Freeman
quelle
26
Ein Tipp: Ihre "Dimensionen" werden shapein NumPy als "Dimensionen" bezeichnet . Was NumPy die Dimension nennt, ist in Ihrem Fall 2 ( ndim). Es ist nützlich, die übliche NumPy-Terminologie zu kennen: Dies erleichtert das Lesen der Dokumente!
Eric O Lebigot

Antworten:

498

Es ist .shape:

ndarray. Form
Tupel der Array-Abmessungen.

Somit:

>>> a.shape
(2, 2)
Felix Kling
quelle
25
Hinweis: shapeWird möglicherweise genauer als Attribut als als Funktion beschrieben , da es nicht mit der Funktionsaufrufsyntax aufgerufen wird.
Nobar
17
@nobar eigentlich ist es eine Eigenschaft (die sowohl ein Attribut als auch eine Funktion ist, wirklich)
wim
@wim genauer gesagt ist Eigenschaft eine Klasse . Bei Klasseneigenschaften (eine Eigenschaft, die Sie in Ihre Klasse eingefügt haben) handelt es sich um Objekte vom Typ Eigenschaft, die als Attribut der Klasse verfügbar gemacht werden. Ein Attribut in Python ist der Name nach dem Punkt .
Pedro Rodrigues
2
Wenn Sie wirklich nitpicken wollen, ist es ein Deskriptor. Obwohl es propertysich um eine Klasse handelt, ndarray.shapehandelt es sich nicht um eine Klasse, sondern um eine Instanz des Eigenschaftstyps.
wim
66

Zuerst:

Konventionell numpylautet in der Python-Welt die Abkürzung für np:

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

Zweite:

In Numpy sind Dimension , Achse / Achse , Form verwandte und manchmal ähnliche Konzepte:

Abmessungen

In Mathematik / Physik wird Dimension oder Dimensionalität informell als die Mindestanzahl von Koordinaten definiert, die erforderlich sind, um einen Punkt innerhalb eines Raums anzugeben. Aber in Numpy ist es laut Numpy Doc dasselbe wie Achse / Achsen:

In Numpy werden Dimensionen als Achsen bezeichnet. Die Anzahl der Achsen ist Rang.

In [3]: a.ndim  # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2

Achse / Achsen

die n-te Koordinate zum Indizieren eines arrayin Numpy. Mehrdimensionale Arrays können einen Index pro Achse haben.

In [4]: a[1,0]  # to index `a`, we specific 1 at the first axis and 0 at the second axis.
Out[4]: 3  # which results in 3 (locate at the row 1 and column 0, 0-based index)

gestalten

beschreibt, wie viele Daten (oder der Bereich) entlang jeder verfügbaren Achse vorliegen.

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data
YaOzI
quelle
45
import numpy as np   
>>> np.shape(a)
(2,2)

Funktioniert auch, wenn die Eingabe kein Numpy-Array, sondern eine Liste von Listen ist

>>> a = [[1,2],[1,2]]
>>> np.shape(a)
(2,2)

Oder ein Tupel Tupel

>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)
user4421975
quelle
np.shapewandelt sein Argument zuerst in ein Array um, wenn es nicht das Formattribut hat. Deshalb funktioniert es mit den Listen- und Tupelbeispielen.
hpaulj
17

Sie können .shape verwenden

In: a = np.array([[1,2,3],[4,5,6]])
In: a.shape
Out: (2, 3)
In: a.shape[0] # x axis
Out: 2
In: a.shape[1] # y axis
Out: 3
Rhuan Caetano
quelle
9

Sie können .ndimfür die Bemaßung verwenden und .shapedie genaue Bemaßung kennen

var = np.array([[1,2,3,4,5,6], [1,2,3,4,5,6]])

var.ndim
# displays 2

var.shape
# display 6, 2

Sie können die Dimension mit der .reshapeFunktion ändern

var = np.array([[1,2,3,4,5,6], [1,2,3,4,5,6]]).reshape(3,4)

var.ndim
#display 2

var.shape
#display 3, 4
Daksh
quelle
7

Die shapeMethode erfordert, dass es sich aum einen Numpy ndarray handelt. Numpy kann aber auch die Form von Iterablen reiner Python-Objekte berechnen:

np.shape([[1,2],[1,2]])
aph
quelle
1

a.shapeist nur eine limitierte Version von np.info(). Überprüfen Sie dies heraus:

import numpy as np
a = np.array([[1,2],[1,2]])
np.info(a)

aus

class:  ndarray
shape:  (2, 2)
strides:  (8, 4)
itemsize:  4
aligned:  True
contiguous:  True
fortran:  False
data pointer: 0x27509cf0560
byteorder:  little
byteswap:  False
type: int32
Prosti
quelle