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