第 81 天:NumPy Ndarray 對象及數據類型

2021-03-02 Python技術

上一篇文章中我們詳細介紹了 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 Ndarray 對象

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

ndarray 對象是用於存放同類型元素的多維數組。ndarray 中的每個元素在內存中都有相同存儲大小的區域。1、ndarray 內部內容組成一個指向數據(內存或內存映射文件中的一塊數據)的指針。數據類型或 dtype,描述在數組中的固定大小值的格子。一個表示數組形狀(shape)的元組,表示各維度大小的元組。一個跨度元組(stride),其中的整數指的是為了前進到當前維度下一個元素需要"跨過"的字節數。2、ndarray 的內部結構ndarray 內部結構
3、創建 ndarray
from numpy import *eye(4)Out[3]: array([[1., 0., 0., 0.],       [0., 1., 0., 0.],       [0., 0., 1., 0.],       [0., 0., 0., 1.]])

由以上實例可知,創建一個 ndarray 只需調用 NumPy 的 array 函數即可,如下:

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

3.1 參數說明名稱描述object數組或嵌套的數列dtype數組元素的數據類型,可選copy對象是否需要複製,可選order創建數組的樣式,C為行方向,F為列方向,A為任意方向(默認)subok默認返回一個與基類類型一致的數組ndmin指定生成數組的最小維度

值得注意的是:ndmin 默認為數值為 0

3.2 運用實例

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

import numpy as np a = np.array([1,2,3])  print (a)

輸出結果如下:

創建一個大於 1 維的數組

import numpy as np a = np.array([[1,  2],  [3,  4]])  print (a)

輸出結果如下:

使用最小維度參數指定維度

以下實例指定數組維度為 2 維,ndmin 默認維度是 0

import numpy as np a = np.array([1,  2,  3,4,5], ndmin =  2)  print (a)

輸出結果為:

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

import numpy as np a = np.array([1,  2,  3], dtype = complex)  print (a)

輸出結果:

二、NumPy 數據類型

NumPy 支持的數據類型比 Python 內置的類型要更多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應為 Python 內置的類型。

1、NumPy 常用數據類型

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

名稱描述bool_布爾型數據類型(True 或者 False)int_默認的整數類型(類似於 C 語言中的 long,int32 或 int64)intc與 C 的 int 類型一樣,一般是 int32 或 int 64intp用於索引的整數類型(類似於 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,等等。

2、數據類型對象-dtype

數據類型對象是用來描述與數組對應的內存區域如何使用,這依賴如下幾個方面:

數據的類型(整數,浮點數或者 Python 對象)在結構化類型的情況下,欄位的名稱、每個欄位的數據類型和每個欄位所取的內存塊的部分

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

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

numpy.dtype(object, align, copy)

align - 如果為 true,填充欄位使其類似 C 的結構體。copy - 複製 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用

實例操作:

實例 1

import numpy as np# 使用標量類型da = np.array([1, 2, 3])print(da.dtype)

輸出結果為:

實例 2

import numpy as np# int8, int16, int32, int64 四種數據類型可以使用字符串 'i1', 'i2','i4','i8' 代替dt = np.dtype('i4')print(dt)

輸出結果為:

3、結構化數據類型的運用

結構化數據類型的使用,類型欄位和對應的實際類型將被創建

實例1:創建年齡數組並且應用於 ndarray 對象

1)創建一個結構化數據類型
da = np.dtype(np.int64)print(da)
# 創建dt = np.dtype([('age',np.int8)])print(dt)

輸出結果為:

2)將結構化數據類型應用於ndarray 對象
dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a)

輸出結果為:

3) 類型欄位名可以用於存取實際的 age 列
dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age'])

輸出結果為:

實例2:定義一個結構化數據類型 student,包含字符串欄位 name,整數欄位 age,及浮點欄位 marks,並將這個 dtype 應用到 ndarray 對象。

1) 創建數組
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print(student)

輸出結果:

[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]

2) 將數組應用與 ndarray 對象
import numpy as npstudent = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print(a)

輸出結果為:

[(b'abc', 21, 50.) (b'xyz', 18, 75.)]

3.1 內建類型的字符代碼如下:字符對應類型b布爾型i(有符號) 整型u無符號整型 integerf浮點型c複數浮點型mtimedelta(時間間隔)Mdatetime(日期時間)O(Python) 對象S, a(byte-)字符串UUnicodeV原始數據 (void)3.2 NumPy 數據類型轉換

numpy 數據類型轉換需要調用方法 astype(),不能直接修改 dtype。調用 astype 返回數據類型修改後的數據,但是源數據的類型不會變,需要進一步對源數據的賦值操作才能改變。

實例:

da = np.array([1.2,1.1,1.0])# 輸出 da 的數據類型print(da.dtype)# 輸出 float64
# 轉換 da 的數據類型print(da.astype(np.int32))# 輸出 [1 1 1]
# 重新查看數據類型,發現數據類型還未改變print(da.dtype)# 輸出 float64
# 重新進行賦值操作da = da.astype(np.int32)print(da.dtype) # 輸出int32
print(da)# 輸出 [1 1 1]

4、複數

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

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

實例:

import numpy as np a = np.array([1,  2,  3], dtype = complex)  print (a)

輸出:

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

總結

本章節是對 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數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    Python數據分析之Numpy學習 2 —— NumPy 基礎學習NumPy(Numerical Python)是高性能科學計算和數據分析的基礎包。NumPy的主要對象是同構數據多維容器(homogeneous multidimensional array)——ndarray,也就是說每一個ndarray都是一個相同類型元素組成的表格(二維)。在NumPy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。軸這個概念必須牢記,否則放棄吧。首先軸是從0開始計的,0代表最高維,次高維是1,以此類推。
  • Numpy基礎:創建ndarray及數據類型
    一起學習,一起成長1.創建ndarray創建數組最簡單的辦法就是使用array函數。它接受一切序列型的對象(包括其他數組),然後產生一個新的含有傳入數據的Numpy數組。np.array會嘗試為新建的這個數組推斷出一個較為合適的數據類型。數據類型保存在一個特殊的dtype對象中。其他一些可以新建數組的函數。比如zeros和ones分別可以創建指定長度或形狀的全0或全1數組。empty可以創建一個沒有任何具體值的數組。
  • NumPy ndarray數組的創建
    NumPy 封裝了一個新的數據類型 ndarray(N-dimensional Array),它是一個多維數組對象。該對象封裝了許多常用的數學運算函數,方便我們做數據處理、數據分析等。那麼,如何生成 ndarray 呢?
  • 如何把小豬佩奇放到多維空間裡(深入理解numpy中的ndarray對象)
    在使用numpy對ndarray對象進行處理時,我們動輒就會碰到大於二維的數據。這時候,很多小朋友肯定會犯難,如何理解這些數據?怎麼才能在腦海裡把這些數據跟我們的現實生活聯繫起來進行理解呢?今天,我帶大家通過一個實例來深入理解一下這個數據結構。
  • numpy中的ndarray
    軟硬體環境簡介numpy是python中的一個數值計算的開源庫,主要用來存儲和處理多維數組,核心數據結構是ndarray。本文分享ndarray的基本使用, 首先需要安裝numpypip install numpy二維ndarray要構造二維數組(就是矩陣),需要知道數組的行數、列數和每個元素的數據類型,在numpy中,常見的有uint8、int32、float32、float64等等
  • Numpy基礎-認識ndarray
    學習數據分析你一定要會Jupyter notebookndarrayndarray是一個數組對象,可以是一維,也可以是多維。它可以看成一個同類型數據的容器,注意只能是同類型。每個數組都有一個shape和一個dtype,前者是數組的維度,後者說明這個數組的類型。
  • Python數據分析 | 第四章 Numpy 基礎之ndarray
    4.1 NumPy的ndarray:一種多維數組對象NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。你可以利用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算一樣。
  • NumPy中的ndarray與Pandas的Series和DataFrame之間的區別與轉換
    在數據分析中,經常涉及numpy中的ndarray對象與pandas的Series和DataFrame對象之間的轉換,讓一些開發者產生了困惑。本文將簡單介紹這三種數據類型,並以金融市場數據為例,給出相關對象之間轉換的具體示例。
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能
  • Numpy 修煉之道 (2)—— N維數組 ndarray
    推薦閱讀時間:5min~6min文章內容:Numpy中的N維數組 ndarrayNumpy 中最重要的一個對象就是 ndarray。ndarray 結構圖ndarray中的每個元素在內存中使用相同大小的塊。
  • 從numpy開啟Python數據科學之旅
    一個路徑就是從純程式語言的角度來學習Python的,包括Python編程基礎、編寫函數、Python高級特性、函數式編程、面向對象編程、多進程和多線程、常用內建模塊和第三方庫等等,旨在學習和鍛鍊編程思維,提高小編自身的coding能力。
  • 數據分析入門 | numpy基礎:數組和矢量計算
    ——《利用Python進行數據分析》Numpy的ndarray:一種多維數組對象       Numpy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。可以利用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算一樣。
  • 學員筆記||Python數據分析之:numpy入門(一)
    :Numpy簡介,ndarray對象的構建,以及對ndarray屬性的理解。 名詞解釋:ndarray是numpy的核心數據類型,即(n-dimensional array)多維數組,tensorflow中的tensor(張量),它本質上也多維數組,但這個名字很高大上。因此,理解多維數組對之後的機器學習會有很大幫助。導入import numpy as np
  • numpy中的數據類型對象有哪些
    Numpy數據類型numpy是一個python擴展包,它可以為我們提供更精確的科學技術,更強大的數學能力。為此,numpy定義了比python更豐富的數據類型來達成目的。數據類型以上就是一系列Numpy中提供的數據類型。需要理解的是,Numpy中的數據類型,和python本身的數據類型是不同的。Numpy中的數據類型,實質是數據類型對象dtype的實例。
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • NumPy ndarray合併數組
    表1:Num:Py ndarray 數組合併方法函數描述np. append()內存佔用大np.concatenate()沒有內存問題np. stack()沿著新的軸加入一系列數組np.hstack()堆棧數組垂直順序(行)np.vstack()堆棧數組垂直順序(列)np.dstack()堆棧數組按順序深入(沿第3維)np.vsplit()將數組分解成垂直的多個子數組的列表
  • 【翻譯】《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算
    語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第3章(上)Python的數據結構、函數和文件【翻譯】《利用Python進行數據分析·第2版》第3章(中)Python的數據結構、函數和文件【翻譯】《利用Python進行數據分析·第2版》第3章(下)Python的數據結構、函數和文件NumPy(Numerical
  • Python數據分析之NumPy數值計算
    NumPy 是一個運行速度非常快的數學庫,主要用於數組計算,包含:•一個強大的N維數組對象 ndarray•廣播功能函數•整合 C/C++/Fortran 代碼的工具•線性代數、傅立葉變換、隨機數生成等功能NumPy 數組對象 ndarray數組對象 ndarray簡介NumPy 最重要的一個特點是其
  • Python數據分析之numpy數組全解析
    在NumPy 中,最重要的對象是稱為 ndarray 的N維數組類型,它是描述相同類型的元素集合,numpy所有功能幾乎都以ndarray為核心展開。ndarray 中的每個元素都是數據類型對象(dtype)的對象。
  • 【數據分析】Numpy
    2、ndarray -多維數組對象對象是如何計算的通過ndarray這個多維數組對象可以讓這些批量計算變得更加簡單,當然這隻它其中一種優勢,接下來就通過具體的操作來發現。 2、創建ndarray對象np.array()3、ndarray是一個多維數組列表接下來就多維數組舉個例子: