今天給大家分享乙個資料分析處理資料的常見的庫:numpy。這個庫是 python 資料分析的基礎,它提供的資料結構比 python 自身的更高效。我們知道 python 有自帶的列表資料結構。numpy 庫和 list 列表有什麼區別呢?
python list 列表儲存的是物件的指標,比如 [0,1,2] 需要儲存 3 個指標和 3 個整數的物件,這樣就很浪費記憶體了。
那 numpy 是怎麼存資料的呢?numpy 是儲存在乙個連續的記憶體塊中,節約了計算資源。
小技巧避免採用隱式拷貝,多用就地操作,比如你想列印 5 個 b,有兩種方法:
# 方法1b = 5b*=5print(b)# 方法2b = 5a=b*5print(a)
兩種方法結果是一樣的,但是效能相差很大,方法 1 效能更優,上篇文章講到的效能方面和這類似
image
numpy 庫安裝
直接使用 pip 命令安裝,簡單方便。
pip install numpy
ndarray物件
numpy 陣列的維數稱為秩(rank),一維陣列的秩為 1,二維陣列的秩為 2,以此類推。在 numpy 中,每乙個線性的陣列稱為是乙個軸(axes),秩其實是描述軸的數量。比如說,二維陣列相當於是乙個一維陣列,而這個一維陣列中每個元素又是乙個一維陣列。所以這個一維陣列就是 numpy 中的軸(axes),而軸的數量——秩,就是陣列的維數。
ndarray 內部由以下內容組成:
乙個指向資料(記憶體或記憶體對映檔案中的一塊資料)的指標。
資料型別 dtype,描述在陣列中的固定大小值的格仔。
乙個表示陣列形狀(shape)的元組,表示各維度大小的元組。
建立陣列
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a)
# 結果
[[1 2 3]
[4 5 6]
[7 8 9]]
用 shape 屬性獲得陣列的大小。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a.shape)
# 結果
(3, 3)
更改陣列的元素,把元素中 5 換成 0,直接用下標。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a[1, 1] = 0
print(a)
# 結果
[[1 2 3]
[4 0 6]
[7 8 9]]
通過 dtype 獲得元素的屬性。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a.dtype)
# 結果
int32
結構陣列
比如我想統計乙個班的學生姓名、語文、數學、英語成績,當然我們可以通過下標來獲取,當這樣不夠高效。用 numpy 怎麼操作呢?我們得先用 dtype 定義好自定義的資料結構。
import numpy as np
studenttype = np.dtype({
'names': ['name', 'chinese', 'math', 'english'],
'formats': ['s32', 'i', 'i', 'i']
然後我們用 array 定義真實資料的陣列時,把 stype 元素屬性定義為上面自定義的資料結構,這樣就可以呼叫自定義的資料結構了。
students = np.array([('zhangsan', 85, 72, 56), ('lisi', 88, 90, 68),
('wangwu', 78, 66, 88)], dtype=studenttype)
我們把需要的值全部取出來,這裡我們取出全部的值。
name = students[:]['name']
chinese = students[:]['chinese']
math = students[:]['math']
english = students[:]['english']
資料提取出來之後我們就可以對資料進行處理了,比如,我們要求這三個學生各科成績的平均值。在 numpy 庫中,mean() 用來求平均值。
print(np.mean(chinese))
print(np.mean(math))
print(np.mean(english))
# 結果
83.66666666666667
76.0
70.66666666666667
很多夥伴可能覺得很繁瑣,但是這種通過自己自定義的資料結構更方便,特別是針對龐大的資料量,整理資料的能力也更高效。
ufun運算
ufun 是 universal function 的縮寫,對陣列中的每個元素進行函式式的操作,計算速度快,因為很多 ufun 函式都是採用 c 語言實現的。
建立連續陣列
兩種函式可以建立,第一種用 arange 函式建立,格式:arange(初始值,終值,步長),其中終值是開區間,不包括其值。
import numpy as np
b = np.arange(1, 8, 2)
print(b)
# 結果
[1 3 5 7]
第二種用 linspace 函式建立,格式:linspace(初始值,終值,元素個數),其中終值是閉區間,包括其值。
import numpy as np
b = np.linspace(1, 7, 4)
print(b)
# 結果
[1. 3. 5. 7.]
演算法運算
可以對陣列進行基本的加減乘除、取餘運算。
加減乘除運算
用上面兩個函式建立的陣列舉例。
import numpy as np
b = np.linspace(1, 7, 4)
c = np.arange(1, 8, 2)
print(np.add(b, c)) # 加法運算
print(np.subtract(b, c)) # 減法運算
print(np.multiply(b, c)) # 乘法運算
print(np.divide(b, c)) # 除法運算
print(np.mod(b, c)) # 取餘運算
# 結果
[ 2. 6. 10. 14.]
[0. 0. 0. 0.]
[ 1. 9. 25. 49.]
[1. 1. 1. 1.]
[0. 0. 0. 0.]
計算陣列中最大值、最小值、平均值,標準差、方差。
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a.max()) # 陣列中最大值
print(a.min()) # 陣列中最小值
print(a.mean()) # 陣列中平均值
print(a.std()) # 陣列中標準差
print(a.var()) # 陣列中方差
# 結果
5.02.581988897471611
6.666666666666667
資料分析的基礎庫 numpy 庫的基本用法就介紹到這裡。
python庫numpy的使用
python在構造機器學習應用程式時,numpy作為乙個重要的函式庫會被經常使用,裡面有便捷的向量和矩陣的計算函式 from numpy import 構造4 4的隨機矩陣 matrix mat random.rand 4,4 矩陣逆矩陣 invmat matrix.i 單位矩陣 matrix ma...
python 矩陣庫 NumPy矩陣庫
numpy 矩陣庫 numpy 包包含乙個 matrix庫numpy.matlib。此模組的函式返回矩陣而不是返回ndarray物件。matlib.empty matlib.empty 函式返回乙個新的矩陣,而不初始化元素。該函式接受以下引數。numpy.matlib.empty shape,dty...
python擴充套件庫numpy學習
numpy是 python 語言的乙個擴充套件程式庫,支援大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。它整合了c c 的工具,使用時又很像matlab,還包括了線性代數 傅利葉變換 隨機數生成等功能。在使用numpy庫之前你需要安裝numpy庫 或者可以匯入numpy模組並生成...