Apa perbedaan antara ndarray dan array di numpy?

Jawaban:

221

numpy.arrayhanyalah fungsi kenyamanan untuk membuat ndarray; ini bukan kelas itu sendiri.

Anda juga dapat membuat array menggunakan numpy.ndarray, tetapi itu bukan cara yang disarankan. Dari dokumentasi numpy.ndarray:

Array harus dibangun menggunakan array, zerosatau empty... Parameter yang diberikan di sini merujuk ke metode level rendah ( ndarray(...)) untuk membuat instance array.

Sebagian besar daging implementasi dalam kode C, di sini di multiarray , tetapi Anda dapat mulai melihat antarmuka ndarray di sini:

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

wim
sumber
1
Saya pikir array () diimplementasikan dalam core / src / multiarray / methods.c di array_getarray ().
flxb
6
Ini dapat menggigit Anda jika Anda lupa bahwa np.arrayitu bukan kelas, seperti yang sering saya lakukan. x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L
4
Masih belum tahu mengapa harus menghindari menggunakan ndarray? Karena levelnya rendah?
GabrielChu
@ flxb: Tidak, array_getarrayadalah implementasi dari numpy.ndarray.__array__. numpy.arraydimulai pada _array_fromobject, setidaknya dalam implementasi saat ini.
user2357112 mendukung Monica
2
Jadi mengapa tidak disarankan?
NoName
48

numpy.arrayadalah fungsi yang mengembalikan a numpy.ndarray. Tidak ada tipe objek numpy.array.

Ramón J Romero y Vigil
sumber
31

Hanya beberapa baris kode contoh untuk menunjukkan perbedaan antara numpy.array dan numpy.ndarray

Langkah pemanasan: Buat daftar

a = [1,2,3]

Periksa tipenya

print(type(a))

Kamu akan mendapatkan

<class 'list'>

Bangun sebuah array (dari daftar) menggunakan np.array

a = np.array(a)

Atau, Anda bisa melewatkan langkah pemanasan, langsung miliki

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

Periksa tipenya

print(type(a))

Kamu akan mendapatkan

<class 'numpy.ndarray'>

yang memberitahu Anda jenis array numpy adalah numpy.ndarray

Anda juga dapat memeriksa jenisnya berdasarkan

isinstance(a, (np.ndarray))

dan kamu akan mendapatkan

True

Salah satu dari dua baris berikut ini akan memberi Anda pesan kesalahan

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

numpy.ndarray()adalah kelas, sedangkan numpy.array()metode / fungsi untuk membuat ndarray.

Dalam numpy docs jika Anda ingin membuat array dari ndarraykelas, Anda dapat melakukannya dengan 2 cara seperti dikutip:

1- menggunakan array(), zeros()atau empty()metode: Array harus dibangun menggunakan array, nol atau kosong (lihat bagian Lihat Juga di bawah). Parameter yang diberikan di sini merujuk ke metode tingkat rendah ( ndarray(…)) untuk membuat instance array.

2- dari ndarraykelas secara langsung: Ada dua mode pembuatan array menggunakan __new__: Jika buffer tidak ada, maka hanya bentuk, tipe, dan urutan yang digunakan. Jika buffer adalah objek yang mengekspos antarmuka buffer, maka semua kata kunci ditafsirkan.

Contoh di bawah ini memberikan array acak karena kami tidak menetapkan nilai buffer:

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

contoh lain adalah menetapkan objek array ke buffer contoh:

>>> 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])

dari contoh di atas kami perhatikan bahwa kami tidak dapat menetapkan daftar ke "buffer" dan kami harus menggunakan numpy.array () untuk mengembalikan objek ndarray untuk buffer

Kesimpulan: gunakan numpy.array()jika Anda ingin membuat numpy.ndarray()objek "

Mahmoud Elshahat
sumber
0

Saya pikir dengan np.array()Anda hanya dapat membuat C seperti meskipun Anda menyebutkan urutan, ketika Anda memeriksa menggunakannya np.isfortran()mengatakan salah. tetapi dengan np.ndarrray()ketika Anda menentukan pesanan itu dibuat berdasarkan pesanan yang disediakan.

Sujith Rao
sumber