天天看點

第81天:NumPy Ndarray_Object&NumPy_Data_Type

by 潮汐

上一篇文章中我們詳細介紹了 NumPy 的功能及用途,本章節着重介紹 NumPy 一個神奇的對象 Ndarray 以及 NumPy 資料類型,包括兩者的用途,接下來就開啟神奇之旅吧。

标準安裝的 Python 中用清單 (list) 儲存一組值,它可以用來當作數組使用,不過由于清單的元素可以是任何對象,是以清單中所儲存的是對象的指針。這樣為了儲存一個簡單的[1,2,3],需要有3個指針和三個整數對象。對于數值運算來說這種結構顯然比較浪費記憶體和CPU計算時間。

此外 Python 還提供了一個array子產品,array對象和清單不同,它直接儲存數值,和C語言的一維數組比較類似。但是由于它不支援多元,也沒有各種運算函數,是以也不适合做數值運算。

NumPy 的誕生彌補了這些不足,NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray (下文統一稱之為數組)是存儲單一資料類型的多元數組,而 ufunc 則是能夠對數組進行處理的函數。

NumPy 最重要的一個特點是其 N 維數組對象 ndarray,Ndarray 從名字組成上看是 Nd-array,顧名思義就是 N 維數組的意思,它是一系列多元且同類型資料的集合,以 下标為 0 開始進行集合中元素的索引。ndarray 是記憶體存儲,換言之 ndarray 對象由計算機記憶體的連續一部分組成,并結合索引模式,将每個元素映射到記憶體塊中的一個位置,它比清單存儲節省空間

ndarray 對象是用于存放同類型元素的多元數組。

ndarray 中的每個元素在記憶體中都有相同存儲大小的區域。

一個指向資料(記憶體或記憶體映射檔案中的一塊資料)的指針。

資料類型或 dtype,描述在數組中的固定大小值的格子。

一個表示數組形狀(shape)的元組,表示各次元大小的元組。

一個跨度元組(stride),其中的整數指的是為了前進到目前次元下一個元素需要"跨過"的位元組數。

由以上執行個體可知,建立一個 ndarray 隻需調用 NumPy 的 array 函數即可,如下:

名稱

描述

object

數組或嵌套的數列

dtype

數組元素的資料類型,可選

copy

對象是否需要複制,可選

order

建立數組的樣式,C為行方向,F為列方向,A為任意方向(預設)

subok

預設傳回一個與基類類型一緻的數組

ndmin

指定生成數組的最小次元

值得注意的是:ndmin 預設為數值為 0

建立一個簡單的 ndarray 對象,單維數組

輸出結果如下:

建立一個大于 1 維的數組

使用最小次元參數指定次元

以下執行個體指定數組次元為 2 維,ndmin 預設次元是 0

輸出結果為:

使用 dtype 參數指定數組元素的資料類型

輸出結果:

NumPy 支援的資料類型比 Python 内置的類型要更多,基本上可以和 C 語言的資料類型對應上,其中部分類型對應為 Python 内置的類型。

下表列舉了 NumPy 常用基本資料類型,為了差別于 Python 原生的資料類型,bool、int、float、complex、str 等類型名稱末尾都加了 _。

bool_

布爾型資料類型(True 或者 False)

int_

預設的整數類型(類似于 C 語言中的 long,int32 或 int64)

intc

與 C 的 int 類型一樣,一般是 int32 或 int 64

intp

用于索引的整數類型(類似于 C 的 ssize_t,一般情況下仍然是 int32 或 int64)

int8

位元組(-128 to 127)

int16

整數(-32768 to 32767)

int32

整數(-2147483648 to 2147483647)

int64

整數(-9223372036854775808 to 9223372036854775807)

uint8

無符号整數(0 to 255)

uint16

無符号整數(0 to 65535)

uint32

無符号整數(0 to 4294967295)

uint64

無符号整數(0 to 18446744073709551615)

float_

float64 類型的簡寫

float16

半精度浮點數,包括:1 個符号位,5 個指數位,10 個尾數位

float32

單精度浮點數,包括:1 個符号位,8 個指數位,23 個尾數位

float64

雙精度浮點數,包括:1 個符号位,11 個指數位,52 個尾數位

complex_

complex128 類型的簡寫,即 128 位複數

complex64

複數,表示雙 32 位浮點數(實數部分和虛數部分)

complex128

複數,表示雙 64 位浮點數(實數部分和虛數部分)

另外 numpy 的數值類型實際上是 dtype 對象的執行個體,并對應唯一的字元,包括 np.bool_,np.int32,np.float32,等等。

資料類型對象是用來描述與數組對應的記憶體區域如何使用,這依賴如下幾個方面:

資料的類型(整數,浮點數或者 Python 對象)

資料的大小(例如, 整數使用多少個位元組存儲)

資料的位元組順序(小端法或大端法)

在結構化類型的情況下,字段的名稱、每個字段的資料類型和每個字段所取的記憶體塊的部分

如果資料類型是子數組,它的形狀和資料類型

位元組順序是通過對資料類型預先設定"<"或">"來決定的。"<"意味着小端法(最小值存儲在最小的位址,即低位組放在最前面)。">"意味着大端法(最重要的位元組存儲在最小的位址,即高位組放在最前面)。

dtype 對象是使用以下文法構造的:

object - 要轉換為的資料類型對象

align - 如果為 true,填充字段使其類似 C 的結構體。

copy - 複制 dtype 對象 ,如果為 false,則是對内置資料類型對象的引用

執行個體操作:

執行個體 1

執行個體 2

結構化資料類型的使用,類型字段和對應的實際類型将被建立

執行個體1:建立年齡數組并且應用于 ndarray 對象

執行個體2:定義一個結構化資料類型 student,包含字元串字段 name,整數字段 age,及浮點字段 marks,并将這個 dtype 應用到 ndarray 對象。

字元

對應類型

b

布爾型

i

(有符号) 整型

u

無符号整型 integer

f

浮點型

c

複數浮點型

m

timedelta(時間間隔)

M

datetime(日期時間)

O

(Python) 對象

S, a

(byte-)字元串

U

Unicode

V

原始資料 (void)

numpy 資料類型轉換需要調用方法 astype(),不能直接修改 dtype。調用 astype 傳回資料類型修改後的資料,但是源資料的類型不會變,需要進一步對源資料的指派操作才能改變。

執行個體:

我們把形如 z=a+bi(a, b均為實數)的數稱為複數,其中 a 稱為實部,b 稱為虛部,i 稱為虛數機關。

當虛部 b=0 時,複數 z 是實數; 當虛部 b!=0 時,複數 z 是虛數; 當虛部 b!=0,且實部 a=0 時,複數 z 是純虛數。

輸出:

如上輸出結果就是複數形式的資料類型

本章節是對 NumPy Ndarray 對象及 NumPy 資料類型的用法作詳細介紹,本文介紹的是 Ndarray 基礎知識,等把 NumPy 所有知識點介紹完後會出一個項目實戰那,更好的給運用 NumPy 相關知識點的友人們提供支撐。

https://www.runoob.com/numpy/numpy-ndarray-object.html

https://www.runoob.com/numpy/numpy-dtype.html

文中示例代碼:python-100-days

關注公衆号:python技術,回複"python"一起學習交流

第81天:NumPy Ndarray_Object&NumPy_Data_Type

作者:純潔的微笑

出處:www.ityouknow.com

資源:微信搜【純潔的微笑】關注我,回複 【程式員】【面試】【架構師】有我準備的一線程式必備計算機書籍、大廠面試資料和免費電子書。 一共1024G的資料,希望可以幫助大家提升技術和能力。

本文如對您有幫助,還請多幫 【推薦】 下此文。

點我了解:Tooool-程式員一站式導航網站