Python 科学计算库 Numpy(一)—— 概述
目錄
一 Numpy(Numerical Python)
1. Numpy 是什么
2. Numpy 的主要用途
二 Numpy 數(shù)組 VS Python 列表
三 Numpy 數(shù)據(jù)類(lèi)型和屬性
1. 數(shù)據(jù)類(lèi)型
(1)了解數(shù)據(jù)類(lèi)型
(2)代碼示例
2. 數(shù)組屬性
(1)一般數(shù)組屬性
(2)代碼示例
四 廣播和矢量化
1. 對(duì)不同維度的數(shù)組進(jìn)行加法運(yùn)算
?2. 對(duì)不同維度的數(shù)組進(jìn)行乘法運(yùn)算
五 結(jié)束語(yǔ)
六 參考鏈接
一 Numpy(Numerical Python)
1. Numpy 是什么
Numpy 是 Python 語(yǔ)言進(jìn)行科學(xué)計(jì)算的一個(gè)基礎(chǔ)拓展程序包,它支持大量的維度數(shù)組和矩陣運(yùn)算,并且也提供了大量的數(shù)學(xué)函數(shù)庫(kù)來(lái)進(jìn)行數(shù)組運(yùn)算。它是一個(gè)運(yùn)行速度非常快的數(shù)學(xué)庫(kù),主要用于數(shù)組計(jì)算,包含:
- 一個(gè)強(qiáng)大的N維數(shù)組對(duì)象 ndarray
- 廣播功能函數(shù)
- 整合 C/C++/Fortran 代碼的工具
- 線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能
2. Numpy 的主要用途
Numpy 與 Matplotlib(Python 繪圖庫(kù) Matplotlib) 等第三方庫(kù)結(jié)合起來(lái)一起使用,提供了一個(gè)強(qiáng)大的科學(xué)數(shù)學(xué)計(jì)算環(huán)境,便于我們學(xué)習(xí)數(shù)據(jù)科學(xué)或者機(jī)器學(xué)習(xí)。
二 Numpy 數(shù)組 VS Python 列表
(1)Numpy 專(zhuān)門(mén)對(duì)數(shù)組的操作和運(yùn)算進(jìn)行了設(shè)計(jì),存儲(chǔ)效率和輸入輸出性能遠(yuǎn)遠(yuǎn)大于列表中的嵌套式運(yùn)算,當(dāng)數(shù)組的維度越大時(shí),Numpy的優(yōu)勢(shì)更加明顯。
(2)兩者都可以對(duì)多維的數(shù)組進(jìn)行操作,Numpy 中的 ndarray 是一個(gè)龐大的數(shù)據(jù)容器,可以輕松處理多維數(shù)組;列表通過(guò)嵌套進(jìn)行多維數(shù)組的操作。
(3)Numpy 中的數(shù)組元素必須都是同質(zhì)的,列表中的元素類(lèi)型可以是多樣的,因此列表的通用性能強(qiáng)于 Numpy,但在進(jìn)行科學(xué)計(jì)算時(shí),Numpy 的代碼更為簡(jiǎn)單。
三 Numpy 數(shù)據(jù)類(lèi)型和屬性
1. 數(shù)據(jù)類(lèi)型
(1)了解數(shù)據(jù)類(lèi)型
Numpy 中的一般數(shù)據(jù)類(lèi)型如下面的表格所示:
?
| 數(shù)據(jù)類(lèi)型 | 描述 |
| bool_ | 布爾數(shù)據(jù)類(lèi)型(True或者False) |
| int_ | 默認(rèn)的整數(shù)類(lèi)型 |
| intc | 與C的int類(lèi)型一樣,一般是int32或者int64 |
| intp | 用于索引的整數(shù)類(lèi)型 |
| int8/int16/int32/int64 | 有符號(hào)整數(shù) |
| uint8/uint16/uint32/uint64 | 無(wú)符號(hào)整數(shù) |
| float_ | float64類(lèi)型的簡(jiǎn)寫(xiě) |
| float16 | 半精度類(lèi)型:1個(gè)符號(hào)位,5個(gè)指數(shù)位,10個(gè)尾數(shù)位 |
| float32 | 單精度類(lèi)型:1個(gè)符號(hào)位,8個(gè)指數(shù)位,23個(gè)尾數(shù)位 |
| float64 | 雙精度類(lèi)型:1個(gè)符號(hào)位,11個(gè)指數(shù)位,52個(gè)尾數(shù)位 |
| complex_ | complex128的簡(jiǎn)寫(xiě),即128位復(fù)數(shù) |
| complex64 | 64位復(fù)數(shù),表示雙32位浮點(diǎn)數(shù)(實(shí)數(shù)與虛數(shù)部分) |
| complex128 | 128位復(fù)數(shù),表示雙64位浮點(diǎn)數(shù)(實(shí)數(shù)與虛數(shù)部分) |
(2)代碼示例
一般使用?np.dtype() 語(yǔ)句可以對(duì)數(shù)據(jù)的類(lèi)型、大小、字節(jié)順序等進(jìn)行描述:
""" Author:XiaoMa date:2021/12/30 """ import numpy as npdt = np.dtype(np.int32)#使用標(biāo)量標(biāo)簽 print(dt)dt = np.dtype('i1')#int8, int16, int32, int64 四種數(shù)據(jù)類(lèi)型可以使用字符串 'i1', 'i2','i4','i8' 代替 print(dt)dt = np.dtype('<i1')#字節(jié)順序是通過(guò)對(duì)數(shù)據(jù)類(lèi)型預(yù)先設(shè)定 < 或 > 來(lái)決定的。 < 意味著小端法(最小值存儲(chǔ)在最小的地址,即低位組放在最前面)。> 意味著大端法(最重要的字節(jié)存儲(chǔ)在最小的地址,即高位組放在最前面)。 print(dt)#-------------------- #結(jié)構(gòu)化數(shù)據(jù)類(lèi)型的使用 #-------------------- dt = np.dtype([('age', 'i1')])#創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)類(lèi)型 print(dt)a = np.array([(10,), (20,), (30,)], dtype = dt)#將數(shù)據(jù)類(lèi)型應(yīng)用于數(shù)組對(duì)象 print(a) print(a['age'])#類(lèi)型字段名可用于存取實(shí)際的 age 列 #----------------------------------------------------- #創(chuàng)建一個(gè)student結(jié)構(gòu),用來(lái)記錄學(xué)生的姓名、成績(jī)、年齡。 #----------------------------------------------------- student = np.dtype([('name', 'S8'), ('age', 'i1'), ('marks', 'f')]) a = np.array([('XiaoMa', '21', '99.9'), ('XiaoYang', '20', '98.8'), ('XiaoWang', '21', '97.7')], dtype = student) print(a)得到輸出如下:
?在 python3 中 b' ' 代表字符串屬于 bytes 類(lèi)型,詳細(xì)的介紹可以參考文章下方的鏈接。?
2. 數(shù)組屬性
(1)一般數(shù)組屬性
在 Numpy 中數(shù)組的每一個(gè)線性的維度稱(chēng)為一個(gè)軸(axis),即軸代表一個(gè)一維數(shù)組。當(dāng)我們對(duì)著 axis = 0 進(jìn)行操作時(shí),就是對(duì)數(shù)組的每一列元素進(jìn)行操作;對(duì) axis = 1進(jìn)行操作時(shí),就是對(duì)著數(shù)組的每一行元素進(jìn)行操作。
在 Numpy 中數(shù)組的維度的數(shù)目稱(chēng)為秩(rank),也就是數(shù)組中的軸的數(shù)目,比如一維數(shù)組的秩為1,二維數(shù)組的秩為2。
numpy.ndarray 中的一些重要的對(duì)象屬性如下:
ndarray.ndim: 秩,即維度或者軸的數(shù)目
ndarray.shape: 數(shù)組的維度,對(duì)于矩陣來(lái)說(shuō)n行m列
ndarray.size: 數(shù)組中的元素的個(gè)數(shù),即 n*m
ndarray.dtype: 數(shù)組對(duì)象的元素類(lèi)型
ndarray.itemsize: 每一個(gè)元素的大小,以字節(jié)為單位
ndarray.flags: 數(shù)組對(duì)象的內(nèi)存信息
ndarray.real: 數(shù)組對(duì)象的實(shí)部
ndarray.imag: 數(shù)組對(duì)象的虛部
(2)代碼示例
""" Author:XiaoMa date:2021/12/30 """ import numpy as np#------------------- #Numpy 中的數(shù)據(jù)屬性 #------------------- a = np.arange(24) print(a.ndim)#打印a的秩,目前a的維度只有1a = a.reshape(2, 4, 3)#調(diào)整a的結(jié)構(gòu)形狀 print(a.ndim)a = np.array([[1, 2, 3], [4, 5, 6]]) print(a.shape)#使用 .shape 打印數(shù)組的行數(shù)和列數(shù)a.shape = (3, 2)#使用 .shape 來(lái)改變數(shù)組的1形狀 print(a)x = np.array([1, 2, 3, 4, 5], dtype = np.int8)#數(shù)組的數(shù)據(jù)類(lèi)型為 int8(一個(gè)字節(jié)) print(x.itemsize)#打印字節(jié)數(shù),為1y = np.array([1, 2, 3, 4, 5], dtype = np.float64)# 數(shù)組的數(shù)據(jù)類(lèi)型為 float64(八個(gè)字節(jié)) print(y.itemsize)#打印字節(jié)數(shù),為8print(x.flags)#打印數(shù)組元素的內(nèi)存信息得到的結(jié)果如下:
四 廣播和矢量化
當(dāng)使用 Numpy 對(duì)不同形狀的數(shù)組進(jìn)行數(shù)值計(jì)算時(shí),在相應(yīng)的元素上進(jìn)行對(duì)相應(yīng)的數(shù)組元素的算術(shù)計(jì)算,這就被稱(chēng)為 Numpy 廣播,如:
1. 對(duì)不同維度的數(shù)組進(jìn)行加法運(yùn)算
a0 = np.array([[1, 2, 3], [4, 5, 6]]) a1 = np.array([[1, 0, 0]]) print(a0 + a1)得到輸出:
?就是將一維數(shù)組加到了多維數(shù)組的每一個(gè)維度上
?2. 對(duì)不同維度的數(shù)組進(jìn)行乘法運(yùn)算
a0 = np.array([[1, 2, 3], [4, 5, 6]]) a1 = np.array([[1, 0, 0]]) print(a0*a1)得到輸出:
?可以看出,運(yùn)算形式和加法是一樣的,將會(huì)自行拓展與每一個(gè)維度相乘。
五 結(jié)束語(yǔ)
本篇博文主要簡(jiǎn)單介紹了 Python 語(yǔ)言中的科學(xué)計(jì)算基礎(chǔ)庫(kù) Numpy 中的數(shù)據(jù)類(lèi)型、數(shù)組屬性以及矢量化運(yùn)算,并加以代碼實(shí)現(xiàn)加強(qiáng)理解。?
六 參考鏈接
python列表和Numpy數(shù)組的區(qū)別
菜鳥(niǎo)教程
python中 r'', b'', u'', f'' 的含義
Bytes類(lèi)型
總結(jié)
以上是生活随笔為你收集整理的Python 科学计算库 Numpy(一)—— 概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 计算机视觉(十七)—— 基
- 下一篇: Python 科学计算库 Numpy (