Dimensions du tableau Numpy

367

J'essaie actuellement d'apprendre Numpy et Python. Étant donné le tableau suivant:

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

Existe-t-il une fonction qui renvoie les dimensions de a(ega est un tableau 2 par 2)?

size() renvoie 4 et cela n'aide pas beaucoup.

Morgan FREEMAN
la source
26
Un conseil: vos "dimensions" sont appelées les shape, dans NumPy. Ce que NumPy appelle la dimension est 2, dans votre cas ( ndim). Il est utile de connaître la terminologie NumPy habituelle: cela facilite la lecture des documents!
Eric O Lebigot

Réponses:

498

C'est .shape:

ndarray. forme
Tuple de dimensions du tableau.

Donc:

>>> a.shape
(2, 2)
Felix Kling
la source
25
Remarque: shapepourrait être décrit plus précisément comme un attribut que comme une fonction , car il n'est pas appelé à l'aide de la syntaxe d'appel de fonction.
nobar
17
@nobar en fait c'est une propriété (qui est à la fois un attribut et une fonction)
wim
@wim plus précisément, la propriété est une classe . Dans le cas des propriétés de classe (une propriété que vous mettez dans votre classe), ce sont des objets de type propriété exposés en tant qu'attribut de la classe. Un attribut, en python, est le nom qui suit le point .
Pedro Rodrigues
2
Si vous voulez vraiment faire une piqûre, c'est un descripteur. Bien que propertylui-même soit une classe, ce ndarray.shapen'est pas une classe, c'est une instance du type de propriété.
wim
66

Première:

Par convention, dans le monde Python, le raccourci pour numpyest np, donc:

In [1]: import numpy as np

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

Seconde:

Dans Numpy, dimension , axe / axes , forme sont des concepts liés et parfois similaires:

dimension

En mathématiques / physique , la dimension ou dimensionnalité est définie de manière informelle comme le nombre minimum de coordonnées nécessaires pour spécifier n'importe quel point dans un espace. Mais dans Numpy , selon le doc numpy , c'est la même chose que axe / axes:

Dans Numpy, les dimensions sont appelées axes. Le nombre d'axes est rang.

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

axe / axes

la nième coordonnée pour indexer un arraydans Numpy. Et les tableaux multidimensionnels peuvent avoir un index par axe.

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)

forme

décrit le nombre de données (ou la plage) le long de chaque axe disponible.

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

Fonctionne également si l'entrée n'est pas un tableau numpy mais une liste de listes

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

Ou un tuple de tuples

>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)
user4421975
la source
np.shapetransforme d'abord son argument en un tableau s'il n'a pas l'attribut shape, c'est pourquoi il fonctionne sur les exemples de liste et de tuple.
hpaulj
17

Vous pouvez utiliser .shape

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
la source
9

Vous pouvez utiliser .ndimpour la dimension et .shapeconnaître la dimension exacte

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

var.ndim
# displays 2

var.shape
# display 6, 2

Vous pouvez changer la dimension en utilisant la .reshapefonction

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

La shapeméthode nécessite que ce asoit un ndarray Numpy. Mais Numpy peut également calculer la forme des itérables d'objets en python pur:

np.shape([[1,2],[1,2]])
aph
la source
1

a.shapeest juste une version limitée de np.info(). Regarde ça:

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

En dehors

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