Dimensiones de la matriz de Numpy

367

Actualmente estoy tratando de aprender Numpy y Python. Dada la siguiente matriz:

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

¿Hay una función que devuelva las dimensiones de a(ega es una matriz de 2 por 2)?

size() devuelve 4 y eso no ayuda mucho.

Morgan Freeman
fuente
26
Un consejo: sus "dimensiones" se llaman shape, en NumPy. Lo que NumPy llama la dimensión es 2, en su caso ( ndim). Es útil conocer la terminología habitual de NumPy: ¡esto facilita la lectura de los documentos!
Eric O Lebigot

Respuestas:

498

Es .shape:

ndarray forma
Tupla de dimensiones de la matriz.

Así:

>>> a.shape
(2, 2)
Felix Kling
fuente
25
Nota: shapepodría describirse con mayor precisión como un atributo que como una función , ya que no se invoca utilizando la sintaxis de llamada a función.
nobar
17
@nobar en realidad es una propiedad (que es a la vez un atributo y una función, en realidad)
wim
@wim más específicamente la propiedad es una clase . En el caso de las propiedades de clase (una propiedad que coloca en su clase), son objetos de propiedad de tipo expuestos como un atributo de la clase. Un atributo, en python, es el nombre que sigue al punto .
Pedro Rodrigues el
2
Si realmente quieres hacer trampas, es un descriptor. Aunque en propertysí mismo es una clase, ndarray.shapeno es una clase, es una instancia del tipo de propiedad.
wim
66

Primero:

Por convención, en el mundo de Python, el atajo para numpyes np, entonces:

In [1]: import numpy as np

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

Segundo:

En Numpy, dimensión , eje / ejes , forma están relacionados y, a veces, conceptos similares:

dimensión

En Matemáticas / Física , la dimensión o dimensionalidad se define informalmente como el número mínimo de coordenadas necesarias para especificar cualquier punto dentro de un espacio. Pero en Numpy , de acuerdo con el documento numpy , es lo mismo que eje / ejes:

En Numpy las dimensiones se llaman ejes. El número de ejes es rango.

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

eje / ejes

la enésima coordenada para indexar an arrayen Numpy. Y las matrices multidimensionales pueden tener un índice por eje.

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

describe cuántos datos (o el rango) a lo largo de cada eje disponible.

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

También funciona si la entrada no es una matriz numpy sino una lista de listas

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

O una tupla de tuplas

>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)
usuario4421975
fuente
np.shapeprimero convierte su argumento en una matriz si no tiene el atributo de forma. Es por eso que funciona en la lista y ejemplos de tuplas.
hpaulj
17

Puedes usar .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
fuente
9

Puede usar .ndimpara dimensionar y .shapeconocer la dimensión exacta

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

var.ndim
# displays 2

var.shape
# display 6, 2

Puedes cambiar la dimensión usando la .reshapefunción

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

El shapemétodo requiere que asea ​​un numpy ndarray. Pero Numpy también puede calcular la forma de los iterables de los objetos de python puros:

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

a.shapees solo una versión limitada de np.info(). Mira esto:

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

Fuera

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
fuente