Wymiary tablicy Numpy

367

Obecnie próbuję nauczyć się Numpy i Pythona. Biorąc pod uwagę następującą tablicę:

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

Czy istnieje funkcja zwracająca wymiary a(np. Tablica 2 na 2)?

size() zwraca 4 i to niewiele pomaga.

Morgan Freeman
źródło
26
Porada: twoje „wymiary” są nazywane shapew NumPy. To, co NumPy nazywa wymiarem, to 2, w twoim przypadku ( ndim). Warto znać zwykłą terminologię NumPy: ułatwia to czytanie dokumentów!
Eric O Lebigot,

Odpowiedzi:

498

To jest .shape:

ndarray. kształt
Kratka wymiarów tablicy.

A zatem:

>>> a.shape
(2, 2)
Felix Kling
źródło
25
Uwaga: shapemoże być dokładniej opisany jako atrybut niż jako funkcja , ponieważ nie jest wywoływany przy użyciu składni wywołania funkcji.
nobar
17
@nobar faktycznie jest to właściwość (która jest zarówno atrybutem, jak i funkcją, naprawdę)
wim
@ wim dokładniej właściwość jest klasą . W przypadku właściwości klasy (właściwość, którą umieścisz w swojej klasie), są to obiekty o właściwościach typu ujawnione jako atrybut klasy. Atrybut w pythonie to nazwa występująca po kropce .
Pedro Rodrigues
2
Jeśli naprawdę chcesz nitpick, to jest deskryptor. Chociaż propertysama jest klasą, ndarray.shapenie jest klasą, jest instancją typu właściwości.
wim
66

Pierwszy:

Zgodnie z konwencją w świecie Python skrót numpyto np:

In [1]: import numpy as np

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

Druga:

W Numpy wymiar , oś / osie , kształt są powiązane, a czasem podobne pojęcia:

wymiar

W matematyce / fizyce wymiar lub wymiarowość jest nieformalnie definiowana jako minimalna liczba współrzędnych potrzebnych do określenia dowolnego punktu w przestrzeni. Ale w Numpy , zgodnie z dokumentem numpy , jest to to samo, co oś / osie:

W Numpy wymiary nazywane są osiami. Liczba osi to ranga.

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

oś / osie

nta współrzędnych indeksowany arrayw NumPy. A tablice wielowymiarowe mogą mieć jeden indeks na oś.

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)

kształt

opisuje liczbę danych (lub zakres) wzdłuż każdej dostępnej osi.

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

Działa również, jeśli wejście nie jest tablicą liczb liczbowych, ale listą list

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

Lub krotkę krotek

>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)
użytkownik4421975
źródło
np.shapeNajpierw zamienia swój argument w tablicę, jeśli nie ma atrybutu kształtu, dlatego działa na przykładach listy i krotek.
hpaulj
17

Możesz użyć .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
źródło
9

Możesz użyć .ndimwymiaru i .shapeznać dokładny wymiar

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

var.ndim
# displays 2

var.shape
# display 6, 2

Możesz zmienić wymiar za pomocą .reshapefunkcji

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
źródło
7

shapeMetoda wymaga, aby abyć ndarray Numpy. Ale Numpy może również obliczyć kształt iterowalnych obiektów czystego pytona:

np.shape([[1,2],[1,2]])
aph
źródło
1

a.shapeto tylko ograniczona wersja np.info(). Spójrz na to:

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

Na zewnątrz

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
źródło