Numpy dizi boyutları


367

Şu anda Numpy ve Python öğrenmeye çalışıyorum. Aşağıdaki dizi verildiğinde:

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

Boyutlarını döndüren bir işlev var mı a(ega 2'ye 2 dizidir)?

size() 4 döndürür ve bu çok yardımcı olmaz.


26
Bir tavsiye: shapeNumPy'de "boyutlarınız" olarak adlandırılır . NumPy'nin boyutu çağırdığı şey, sizin durumunuzda ( ndim). Her zamanki NumPy terminolojisini bilmek yararlıdır: bu, belgeleri okumayı kolaylaştırır!
Eric O Lebigot

Yanıtlar:


498

Bu .shape:

ndarray. şekil
Dizi boyutları dizisi.

Böylece:

>>> a.shape
(2, 2)

25
Not: işlev çağrısı sözdizimi kullanılarak çağrılmadığından, bir işlevden daha öznitelikshape olarak tanımlanabilir .
nobar

17
@nobar aslında bir özelliktir (bu hem bir özellik hem de bir işlevdir)
wim

@wim daha spesifik olarak bir sınıf özelliğidir . Sınıf özellikleri (sınıfınıza koyduğunuz bir özellik) söz konusu olduğunda, bunlar sınıfın bir özniteliği olarak maruz bırakılan type özelliği nesneleridir. Python'daki bir özellik, noktayı izleyen addır .
Pedro Rodrigues

2
Gerçekten nitpick yapmak istiyorsanız, bu bir tanımlayıcıdır. propertyKendisi bir sınıf olmasına rağmen , bir sınıf ndarray.shapedeğil, özellik türünün bir örneğidir.
wim

66

İlk:

Kural olarak, Python dünyasında, kısayol numpyşudur np:

In [1]: import numpy as np

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

İkinci:

Numpy'de boyut , eksen / eksenler , şekil ilişkilidir ve bazen de benzer kavramlardır:

boyut

Gelen Matematik / Fizik , boyut veya boyutluluk gayri bir alan içinde herhangi bir noktayı belirlemek için yeterli koordinat minimum sayısı olarak tanımlanır. Ancak Numpy'de , numpy dokümana göre , eksen / eksenlerle aynı:

Numpy'de boyutlara eksen denir. Eksen sayısı sıralanır.

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

eksen / eksenleri

Numpy'de bir indekslemek için n'inci koordinat array. Ve çok boyutlu dizilerin eksen başına bir indeksi olabilir.

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)

şekil

her bir eksen boyunca kaç veri (veya aralık) olduğunu açıklar.

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)

Giriş bir numpy dizisi değil, bir liste listesi ise de çalışır

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

Veya bir demet tuples

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

np.shapeönce şekil niteliğine sahip değilse argümanını bir diziye dönüştürür, bu yüzden listede ve örneklerde çalışır.
hpaulj

17

.Shape kullanabilirsiniz

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

.ndimBoyut için ve .shapekesin boyutu bilmek için kullanabilirsiniz

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

var.ndim
# displays 2

var.shape
# display 6, 2

.reshapeFonksiyonu kullanarak boyutu değiştirebilirsiniz

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

shapeYöntem gerektirir abir Numpy ndarray olabilir. Ancak Numpy, saf python nesnelerinin tekrarlanabilir şekillerini de hesaplayabilir:

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

1

a.shapeyalnızca sınırlı bir sürümüdür np.info(). Şuna bir bak:

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

Dışarı

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.