python的numpy庫結構 Numpy庫簡介

2021-10-11 22:09:35 字數 3722 閱讀 9693

今天給大家分享乙個資料分析處理資料的常見的庫: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模組並生成...