Ndarray ve numpy dizisi arasındaki fark nedir?


Yanıtlar:


221

numpy.arrayoluşturmak için kolaylık sağlayan bir işlevdir ndarray; sınıfın kendisi değildir.

Ayrıca kullanarak bir dizi oluşturabilirsiniz numpy.ndarray, ancak önerilen bir yol değildir. Öğretisinden numpy.ndarray:

Diziler array, zerosveya empty... kullanılarak oluşturulmalıdır. Burada verilen parametreler , ndarray(...)bir diziyi örneklemek için düşük düzeyli bir yöntemi ( ) belirtir.

Uygulamanın etinin çoğu C kodunda, burada çok dizide , ancak burada ndarray arayüzlerine bakmaya başlayabilirsiniz:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
Ben dizi () dizi_getarray () core / src / multiarray / yöntemleri.c uygulanmaktadır düşünüyorum .
flxb

6
np.arraySık sık yaptığım gibi bir sınıf olmadığını unutursanız bu sizi ısırabilir . x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L

4
Hala ndaray kullanmaktan kaçınmalısınız? Çünkü bu düşük seviyeli mi?
GabrielChu

@flxb: Hayır, array_getarrayuygulamasıdır numpy.ndarray.__array__. numpy.arraybaşlar _array_fromobject, en azından şu anki uygulamasında,.
user2357112 Monica

2
Peki neden önerilmiyor?
NoName


31

Numpy.array ve numpy.ndarray arasındaki farkı göstermek için birkaç satırlık kod örneği

Isınma adımı: Bir liste oluşturun

a = [1,2,3]

Türü kontrol edin

print(type(a))

Alacaksın

<class 'list'>

Np.array kullanarak bir dizi (listeden) oluşturma

a = np.array(a)

Veya ısınma adımını atlayabilirsiniz, doğrudan

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

Türü kontrol edin

print(type(a))

Alacaksın

<class 'numpy.ndarray'>

hangi numpy dizisinin türünün numpy olduğunu gösterir.

Ayrıca türü

isinstance(a, (np.ndarray))

ve alacaksın

True

Aşağıdaki iki satırdan biri size bir hata mesajı verecektir

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()sınıf, numpy.array()oluşturulacak bir yöntem / işlevdir ndarray.

Numpy belgelerinde, ndarraysınıftan bir dizi oluşturmak istiyorsanız, bunu alıntılandığı gibi 2 yolla yapabilirsiniz:

1- kullanılarak array(), zeros()ya da empty()yöntem: Diziler dizi sıfır kullanılarak ya da boş yapılmalıdır (Ayrıca bkz Aşağıdaki kısmına bakın). Burada verilen parametreler, ndarray(…)bir diziyi örneklemek için düşük düzeyli bir yöntemi ( ) belirtir.

2- doğrudan ndarraysınıftan: Kullanarak dizi oluşturmanın iki modu vardır __new__: Arabellek Yok ise, sadece şekil, dtype ve düzen kullanılır. Arabellek arabellek arabirimini gösteren bir nesneyse, tüm anahtar kelimeler yorumlanır.

Tampon değeri atamadığımız için aşağıdaki örnek rastgele bir dizi veriyor:

np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None)

array([[ -1.13698227e+002,   4.25087011e-303],
       [  2.88528414e-306,   3.27025015e-309]])         #random

başka bir örnek, tampon örneğine dizi nesnesi atamaktır:

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

Yukarıdaki örnekten "tampon" a bir liste atayamayacağımızı ve tampon için ndarray nesnesini döndürmek için numpy.array () kullanmamız gerektiğini fark ettik.

Sonuç: numpy.array()bir numpy.ndarray()nesne yapmak istiyorsanız kullanın "


0

Sanırım np.array()siparişi söylemiş gibi sadece C yaratabilirsiniz, np.isfortran()bunu kullanarak kontrol ettiğinizde yanlış diyor. ancak np.ndarrray()siparişi belirttiğinizde verilen siparişe göre oluşturulur.

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.