Dimensioni dell'array numpy


367

Attualmente sto cercando di imparare Numpy e Python. Dato il seguente array:

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

Esiste una funzione che restituisce le dimensioni di a (ega è un array 2 per 2)?

size() restituisce 4 e questo non aiuta molto.


26
Un consiglio: le tue "dimensioni" sono chiamate shape, in NumPy. Ciò che NumPy chiama la dimensione è 2, nel tuo caso ( ndim). È utile conoscere la solita terminologia NumPy: questo semplifica la lettura dei documenti!
Eric O Lebigot,

Risposte:


498

È .shape:

ndarray. forma
Tupla di dimensioni dell'array.

Così:

>>> a.shape
(2, 2)

25
Nota: shapepotrebbe essere descritto più accuratamente come un attributo che come una funzione , poiché non viene richiamato utilizzando la sintassi della funzione-chiamata.
nobar,

17
@nobar in realtà è una proprietà (che è sia un attributo che una funzione, davvero)
wim

@wim in particolare la proprietà è una classe . Nel caso delle proprietà della classe (una proprietà inserita nella classe), sono oggetti di tipo proprietà esposti come attributo della classe. Un attributo, in python, è il nome che segue il punto .
Pedro Rodrigues,

2
Se vuoi davvero nitpick, è un descrittore. Sebbene di per propertysé sia ​​una classe, ndarray.shapenon è una classe, è un'istanza del tipo di proprietà.
mercoledì

66

Primo:

Per convenzione, nel mondo Python, la scorciatoia per numpyè np, quindi:

In [1]: import numpy as np

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

Secondo:

In Numpy, dimensione , asse / assi , forma sono concetti correlati e talvolta simili:

dimensione

In Matematica / Fisica , dimensione o dimensionalità sono definite in modo informale come il numero minimo di coordinate necessarie per specificare qualsiasi punto all'interno di uno spazio. Ma in Numpy , secondo il documento numpy , è lo stesso di assi / assi:

In Numpy le dimensioni sono chiamate assi. Il numero di assi è rango.

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

asse / assi

l' ennesima coordinata per indicizzare an arrayin Numpy. E le matrici multidimensionali possono avere un indice per asse.

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)

forma

descrive quanti dati (o l'intervallo) lungo ciascun asse disponibile.

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data

45
import numpy as np   
>>> np.shape(a)
(2,2)

Funziona anche se l'input non è un array intorpidito ma un elenco di elenchi

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

O una tupla di tuple

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

np.shapetrasforma prima il suo argomento in un array se non ha l'attributo shape, ecco perché funziona sulla lista e sugli esempi di tupla.
hpaulj,

17

Puoi usare .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

9

Puoi usare .ndimper dimensione e .shapeconoscere la dimensione esatta

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

var.ndim
# displays 2

var.shape
# display 6, 2

È possibile modificare la dimensione utilizzando la .reshapefunzione

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

7

Il shapemetodo richiede che asia un ndarray Numpy. Ma Numpy può anche calcolare la forma di iterabili di oggetti in puro pitone:

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

1

a.shapeè solo una versione limitata di np.info(). Controllalo:

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

Su

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.