溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python?numpy中的ndarray如何理解

發(fā)布時(shí)間:2022-01-24 11:10:35 來(lái)源:億速云 閱讀:230 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Python numpy中的ndarray如何理解,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

numpy 模塊知識(shí):

  • numpy 模塊是一個(gè)開(kāi)源的第三方Python庫(kù),常用于科學(xué)和工程領(lǐng)域,是科學(xué)Python和PyData 生態(tài)系統(tǒng)的核心。

  • numpy 模塊易學(xué)易用的特點(diǎn),基本上覆蓋了初學(xué)者到先進(jìn)科學(xué)研究員的所有人群。

  • numpy 模塊除了在matplotlib上應(yīng)用,它還在Pandas、Scipy、scikit-learn等科學(xué)Python中。

  • numpy 模塊也包含多維數(shù)組和矩陣數(shù)據(jù)結(jié)構(gòu),它專(zhuān)門(mén)提供了具有n維數(shù)組對(duì)象的ndarray,以及對(duì)其進(jìn)行有效操作的方法。

  • numpy 模塊也可用于對(duì)數(shù)組執(zhí)行各種數(shù)學(xué)運(yùn)算,提供高級(jí)數(shù)學(xué)函數(shù)庫(kù),以及數(shù)組和矩陣的操作。

眾所周知,numpy 模塊中數(shù)組對(duì)象是其核心功能,下面我們重點(diǎn)來(lái)學(xué)習(xí)numpy 數(shù)組相關(guān)內(nèi)容。

1. 什么是 ndarray?

ndarray 概念

數(shù)組是numpy 模塊核心數(shù)據(jù)結(jié)構(gòu)。數(shù)組是值的網(wǎng)絡(luò),它的內(nèi)部包含有原始數(shù)據(jù)、如何定義元素以及如何解釋元素的信息。我們可以使用各種方式索引元素網(wǎng)格。

ndarray 是 numpy 模塊中定義 n維數(shù)組類(lèi)型。ndarray 可以描述同種類(lèi)型project的集合。

  • 同種數(shù)據(jù)類(lèi)型:numpy 數(shù)組中的所有元素都是同種類(lèi)類(lèi)型,如int32,float64等

  • 同大小內(nèi)存空間:每個(gè)project占用相同大小內(nèi)存塊

  • 同方式解釋?zhuān)好總€(gè)project由object數(shù)據(jù)類(lèi)型指定,,其中一個(gè)與每個(gè)數(shù)組相關(guān)聯(lián)

  • 可以N個(gè)整數(shù)對(duì)project進(jìn)行索引

ndarray 內(nèi)部關(guān)系

從數(shù)組中我們可以提取python對(duì)象表示的如索引是numpy 內(nèi)置數(shù)組標(biāo)量類(lèi)型之一,我們可以通過(guò)使用數(shù)組標(biāo)量來(lái)輕松操作復(fù)雜的數(shù)據(jù)排列。

Python?numpy中的ndarray如何理解

通過(guò)以上ndarray 內(nèi)部結(jié)構(gòu),我們可以看到 ndarray 主要由 dtype、shape、stride組成

  • ndarray 指向內(nèi)存映射地址的指針-data對(duì)象

  • ndarray 元素解釋形象-dtype對(duì)象

  • ndarray 每個(gè)維度的元素之間的間隔-strides對(duì)象(tuple)

  • ndarray 對(duì)每個(gè)維度的數(shù)量和大小的描述-shape對(duì)象(tuple)

以上四個(gè)python對(duì)象就可以在ndarray 中通過(guò)索引的方式找到指定位置的數(shù)據(jù)。

同時(shí)我們也調(diào)用np.array().flags 獲取字節(jié)序、讀寫(xiě)權(quán)限等信息,可知ndarray 底層是C和Fortran 實(shí)現(xiàn)的。

  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

2. ndarray 內(nèi)存結(jié)構(gòu)

ndarray 內(nèi)存結(jié)構(gòu)

我們通過(guò)numpy.array 方法創(chuàng)建一個(gè)2維數(shù)組

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
import numpy as np

a = np.array([[1,2],[4,5],[7,8]])

print("dim:",a.ndim)
print("strides:",a.strides)
print("dtype:",a.dtype)
print("data:",a.data)
print("shape:",a.shape)
print(a)

通過(guò)array對(duì)象調(diào)用ndarray 標(biāo)量對(duì)象,可以獲知ndarray 維度大小、元素類(lèi)型、間隔等信息

Python?numpy中的ndarray如何理解

通過(guò)上述圖,我們可以知道 ndarray 內(nèi)存主要?jiǎng)澐譃閮刹糠郑?/strong>

  • raw data: 計(jì)算機(jī)一段連續(xù)的block,存儲(chǔ)在C或者Fortran中的數(shù)組

  • metdata:有關(guān)原始數(shù)組數(shù)據(jù)的信息

3. ndarray vs list

ndarray 特點(diǎn)

  • ndarray 要求所有數(shù)據(jù)都是同種類(lèi)型的

  • 每個(gè)數(shù)據(jù)占用空間一樣

  • 數(shù)組中存儲(chǔ)的數(shù)據(jù)是一段連續(xù)的空間

list 特點(diǎn)

  • 可以容納不同數(shù)據(jù)類(lèi)型

  • list 中只存放對(duì)象的引用,再通過(guò)引用找到具體的對(duì)象

  • 對(duì)象的物理地址并不是連續(xù)的

Python?numpy中的ndarray如何理解

所以,綜上所述,ndarray 查找數(shù)據(jù)運(yùn)行效率比list快,同時(shí)ndarray 存儲(chǔ)的數(shù)據(jù)是連續(xù)的一段空間,對(duì)比list 對(duì)象物理地址分散的,ndarray 比 list 更省空間。

上述就是小編為大家分享的Python numpy中的ndarray如何理解了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI