一、簡介
1、概念
NumPy(Numerical Python)是一個用于科學(xué)計算的 Python 庫,提供了多維數(shù)組對象(ndarray)以及數(shù)學(xué)函數(shù),用于處理大規(guī)模數(shù)據(jù)集和執(zhí)行數(shù)值計算。
2、優(yōu)點
當數(shù)據(jù)量達到一定級別后,NumPy 計算會比原生 Python 快。
import time
start_time = time.time()
numbers = list(range(1, 1000001))
total = sum(numbers)
end_time = time.time()
print("原生 Python 計算100萬個元素的和耗時:", end_time - start_time)
import time
import numpy as np
start_time = time.time()
numbers = np.arange(1, 1000001)
total = np.sum(numbers)
end_time = time.time()
print("NumPy 計算100萬個元素的和耗時:", end_time - start_time)
3、特點
Numpy 的主要對象是同種元素的多維數(shù)組。這是?個所有的元素都是?種類型、通過?個正整數(shù)元組索引的元素表格(通常是元素是數(shù)字)。在 Numpy 中維度(dimensions)叫做軸(axes),軸的個數(shù)叫做秩(rank)。
NumPy 數(shù)組是?個多維數(shù)組對象,稱為 ndarray。由兩部分組成:實際的數(shù)據(jù)和描述這些數(shù)據(jù)的元數(shù)據(jù)。
4、作用
可以構(gòu)造?個比普通列表大的多的數(shù)組,并且可以很靈活的對其中所有的元素進行并行化操作。
5、引用
pip install numpy
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
二、創(chuàng)建數(shù)組
1、創(chuàng)建一維數(shù)組
一維數(shù)組是最簡單的數(shù)組形式,也被稱為向量,它只有一個維度,即行(或列)。
一維數(shù)組類似于 Python 中的列表,但它可以包含相同類型的數(shù)據(jù)元素。
一維數(shù)組在數(shù)學(xué)和計算中常用于表示一系列數(shù)據(jù)點或向量。
創(chuàng)建方式
- 直接傳入列表的方式
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # [1 2 3 4 5]
- 傳入 range 生成序列
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr2 = np.array(range(1, 6))
print(arr2) # [1 2 3 4 5]
- 使用 numpy 自帶的 np.arange() 生成數(shù)組
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
# np.arange(起始索引,結(jié)束索引,步長)
arr3 = np.arange(1, 6, 2)
print(arr3) # [1 3 5]
- 使用 np.linspace() 生成等間隔的數(shù)組
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
# np.linspace(起始索引,結(jié)束索引,步長)
arr4 = np.linspace(1, 5, num=5)
print(arr4) # [1. 2. 3. 4. 5.]
3、創(chuàng)建二維數(shù)組
- 二維數(shù)組是具有兩個維度的數(shù)據(jù)結(jié)構(gòu),通常表示矩陣。
- 第一個維度表示行數(shù),第二個維度表示列數(shù)。
- 二維數(shù)組在數(shù)學(xué)和計算中用于表示表格數(shù)據(jù)、圖像、矩陣等多種數(shù)據(jù)結(jié)構(gòu)。
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
# 創(chuàng)建包含2行3列的二維數(shù)組
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
# [[1 2 3]
# [4 5 6]]
# 創(chuàng)建一個2x3的二維數(shù)組,其中每個元素都是0
arr = np.array([[0, 0, 0], [0, 0, 0]])
print(arr)
# [[0 0 0]
# [0 0 0]]
# 創(chuàng)建一個2x3的全0二維數(shù)組
arr = np.zeros((2, 3))
print(arr)
# [[0. 0. 0.]
# [0. 0. 0.]]
# 創(chuàng)建一個2x3的全1二維數(shù)組
arr = np.ones((2, 3))
print(arr)
# [[1. 1. 1.]
# [1. 1. 1.]]
# 創(chuàng)建一個2x2的單位矩陣
arr = np.eye(2)
print(arr)
# [[1. 0.]
# [0. 1.]]
三、屬性和數(shù)組運算
1、基本屬性
- 元素個數(shù):size
- 元素類型:dtype
- 元素字節(jié)大小:itemsize
- 秩:ndim
- 維度:shape
- 元素緩沖區(qū):data
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
print(arr) # [1 2 3 4 5]
size = arr.size
print(size) # 5
dtype = arr.dtype
print(dtype) # int32
itemsize = arr.itemsize
print(itemsize) # 4
dim = arr.ndim
print(dim) # 1
shape = arr.shape
print(shape) # (5,)
data = arr.data
print(data) # <memory at 0x0000029E7F205C00>
2、數(shù)據(jù)類型
NumPy 支持多種數(shù)據(jù)類型,如整數(shù)、浮點數(shù)、布爾值等??梢允褂?dtype 參數(shù)指定數(shù)據(jù)類型。
類型 | 說明 |
---|---|
bool | 用一個字節(jié)存儲的布爾類型(True 或 False) |
int | 由所在平臺決定其大小的整數(shù)(一般為 int32 或 int64) |
int8 | 一個字節(jié)大小的整數(shù),范圍為 -128 到 127 |
int16 | 兩個字節(jié)大小的整數(shù),范圍為 -32768 到 32767 |
int32 | 四個字節(jié)大小的整數(shù),范圍為 -2^31 到 2^32-1 |
int64 | 八個字節(jié)大小的整數(shù),范圍為 -2^63 到 2^63-1 |
uint8 | 一個字節(jié)大小的無符號整數(shù),范圍為 0 到 255 |
uint16 | 兩個字節(jié)大小的無符號整數(shù),范圍為 0 到 65535 |
uint32 | 四個字節(jié)大小的無符號整數(shù),范圍為 0 到 2^32-1 |
uint64 | 八個字節(jié)大小的無符號整數(shù),范圍為 0 到 2^64-1 |
float16 | 半精度浮點數(shù),16 位,正負號 1 位,指數(shù) 5 位,精度 10 位 |
float32 | 單精度浮點數(shù),32 位,正負號 1 位,指數(shù) 8 位,精度 23 位 |
float64 或 float | 雙精度浮點數(shù),64 位,正負號 1 位,指數(shù) 11 位,精度 52 位 |
complex64 | 復(fù)數(shù),分別用兩個 32 位浮點數(shù)表示實部和虛部 |
complex128 或 complex | 復(fù)數(shù),分別用兩個 64 位浮點數(shù)表示實部和虛部 |
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
# 創(chuàng)建指定數(shù)據(jù)類型的數(shù)組
arr = np.array([1, 2, 3], dtype=np.float32)
print(arr) # [1. 2. 3.]
3、數(shù)組運算
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
# [[1 2 3]
# [4 5 6]]
print(arr + arr)
# [[ 2 4 6]
# [ 8 10 12]]
print(arr - arr)
# [[0 0 0]
# [0 0 0]]
print(arr * arr)
# [[ 1 4 9]
# [16 25 36]]
print(arr / arr)
# [[1. 1. 1.]
# [1. 1. 1.]]
廣播機制
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(1 / arr)
# [[1. 0.5 0.33333333]
# [0.25 0.2 0.16666667]]
四、索引和切片
1、基本索引
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
# 獲取第三個元素
element = arr[2]
print(element) # 3
2、多維數(shù)組索引
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 獲取第二行第三列的元素
element_2d = arr_2d[1, 2]
print(element_2d) # 6
3、基本切片
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
# 獲取索引1到3的子數(shù)組
arr_slice = arr[1:4] # 左閉右開
print(arr_slice) # [2, 3, 4]
4、多維數(shù)組切片
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 獲取所有行的第二列及之后的元素
arr_2d_slice = arr_2d[:, 1:] # 逗號前是行,逗號后是列,:表示所有
print(arr_2d_slice)
# [[2, 3],
# [5, 6]]
5、布爾索引
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
# 返回一個布爾數(shù)組,表示大于3的元素
bool_index = arr > 3
subset_by_bool = arr[bool_index]
print(subset_by_bool) # [4, 5]
6、花式索引
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
# 獲取索引為第0,2,4的子數(shù)組
indices = np.array([0, 2, 4])
fancy_indexing = arr[indices]
print(fancy_indexing) # [1, 3, 5]
7、修改元素值
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
# 將索引1的元素修改為10
arr[1] = 10
print(arr) # [ 1 10 3 4 5]
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 將第一行第二列的元素修改為20
arr_2d[0, 1] = 20
print(arr_2d)
# [[ 1 20 3]
# [ 4 5 6]]
索引和切片的區(qū)別總結(jié):文章來源:http://www.zghlxwxcb.cn/news/detail-834865.html
- 返回類型: 索引返回的是單個元素值,而切片返回的是數(shù)組的一個視圖。
- 是否影響原數(shù)組: 對索引得到的元素的修改不會影響原數(shù)組,而對切片的修改會影響原數(shù)組。
- 用法: 索引用于獲取特定位置的元素,而切片用于獲取數(shù)組的子集。
五、統(tǒng)計函數(shù)
1、均值
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
print(mean_value) # 3.0
2、中位數(shù)
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
median_value = np.median(arr)
print(median_value) # 3.0
3、總和
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
sum_value = np.sum(arr)
print(sum_value) # 15
4、乘積
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
product_value = np.prod(arr)
print(product_value) # 120
5、最小值
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
min_value = np.min(arr)
print(min_value) # 1
6、最大值
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
max_value = np.max(arr)
print(max_value) # 5
7、標準差
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
std_deviation = np.std(arr)
print(std_deviation) # 1.4142135623730951
8、方差
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
variance = np.var(arr)
print(variance) # 2.0
9、協(xié)方差
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([5, 4, 3, 2, 1])
covariance_matrix = np.cov(arr1, arr2)
print(covariance_matrix)
# [[ 2.5 -2.5]
# [-2.5 2.5]]
10、百分位數(shù)
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
percentile_50 = np.percentile(arr, 50)
print(percentile_50) # 3.0
11、直方圖
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
histogram_values, bin_edges = np.histogram(arr, bins=5)
print(histogram_values, bin_edges) # [1 1 1 1 1] [1. 1.8 2.6 3.4 4.2 5. ]
12、相關(guān)系數(shù)
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([5, 4, 3, 2, 1])
correlation_matrix = np.corrcoef(arr1, arr2)
print(correlation_matrix)
# [[ 1. -1.]
# [-1. 1.]]
六、按條件篩選
1、基本用法
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 2)
print(indices) # (array([2, 3, 4], dtype=int64),)
2、返回滿足條件的元素
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
values = arr[np.where(arr > 2)]
print(values) # [3 4 5]
3、替換滿足條件的元素
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
arr[np.where(arr > 2)] = 0 # 大于2的返回0
print(arr) # [1 2 0 0 0]
4、使用三元表達式
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
new_arr = np.where(arr > 2, 0, arr) # 大于2的返回0
print(new_arr) # [1 2 0 0 0]
5、多條件選擇
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([1, 2, 3, 4, 5])
indices = np.where((arr > 2) & (arr < 5))
print(indices) # (array([2, 3], dtype=int64),)
6、返回滿足條件的元素的坐標
import numpy as np # 導(dǎo)入 NumPy 庫并使用別名 np
arr = np.array([[1, 2, 3], [4, 5, 6]])
coordinates = np.where(arr > 2)
print(coordinates) # (array([0, 1, 1, 1], dtype=int64), array([2, 0, 1, 2], dtype=int64))
arr = np.array([[1, 2, 3], [4, 5, 6]])
coordinates = arr[np.where(arr > 2)]
print(coordinates) # [3 4 5 6]
記錄學(xué)習(xí)過程,歡迎討論交流,尊重原創(chuàng),轉(zhuǎn)載請注明出處~文章來源地址http://www.zghlxwxcb.cn/news/detail-834865.html
到了這里,關(guān)于數(shù)據(jù)分析 — Numpy 數(shù)組處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!