簡體   English   中英

numpy中的ndarray和array有什么區別?

[英]What is the difference between ndarray and array in numpy?

Numpy 中的ndarrayarray什么區別? 我在哪里可以找到 numpy 源代碼中的實現?

numpy.array只是一個創建ndarray的便捷函數; 它本身不是一個類。

您也可以使用numpy.ndarray創建一個數組,但這不是推薦的方法。 numpy.ndarray的文檔字符串:

數組應該使用arrayzerosempty構造......這里給出的參數是指用於實例化數組的低級方法( ndarray(...) )。

實現的大部分內容都在 C 代碼中, 這里是 multiarray ,但您可以從這里開始查看 ndarray 接口:

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

numpy.array是一個返回numpy.ndarray的函數。 沒有對象類型 numpy.array。

只需幾行示例代碼即可顯示 numpy.array 和 numpy.ndarray 之間的區別

熱身步驟:構建列表

a = [1,2,3]

檢查類型

print(type(a))

你會得到

<class 'list'>

使用 np.array 構造一個數組(從列表中)

a = np.array(a)

或者,你可以跳過預熱步驟,直接有

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

檢查類型

print(type(a))

你會得到

<class 'numpy.ndarray'>

它告訴你numpy 數組的類型是 numpy.ndarray

您還可以通過以下方式檢查類型

isinstance(a, (np.ndarray))

你會得到

True

以下兩行中的任何一行都會給您一條錯誤消息

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

numpy.ndarray()是一個類,而numpy.array()是一個創建ndarray的方法/函數。

在 numpy docs 中,如果你想從ndarray類創建一個數組,你可以用 2 種方法來實現:

1- 使用array()zeros()empty()方法:應該使用數組、零或空構造數組(請參閱下面的另請參閱部分)。 這里給出的參數是指用於實例化數組的低級方法( ndarray(…) )。

2- 直接來自ndarray類:使用__new__創建數組有兩種模式:如果 buffer 為 None,則僅使用 shape、dtype 和 order。 如果 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

另一個示例是將數組對象分配給緩沖區示例:

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

從上面的例子我們注意到我們不能將一個列表分配給“緩沖區”,我們不得不使用 numpy.array() 來返回緩沖區的 ndarray 對象

結論:使用numpy.array()如果你想使一個numpy.ndarray()對象”

我認為使用np.array()您只能創建 C,盡管您提到了順序,但當您使用np.isfortran()檢查時,它顯示為 false。 但是當您根據提供的順序指定它創建的順序時,使用np.ndarrray()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM