NumPy庫是什么
NumPy是Python科學計算的核心庫之一,用來進行科學計算,數值分析等矩陣運算,主要提供了以下幾種功能:
1.多維陣列(ndarray)物件,可以進行快速的數值計算和陣列操作;
2.廣播(Broadcast)功能,可以對不同形狀的陣列進行算術運算;
3.數學函式庫,可以對陣列進行各種數學運算;
4.線性代數、傅里葉變換、亂數生成等工具操作;
5.不同資料型別之間的傳輸功能;
6.資料的輸入和輸出功能,
在NumPy中,最重要的是它的ndarray物件,多為n維陣列,因此它非常適合處理科學計算中的向量、矩陣等資料結構,numpy比串列更加高效,可以大大提高程式運行速度,是資料處理和科學計算的主要工具之一,
如何在NumPy中生成亂數?
在 NumPy 中,我們可以使用 random 模塊來生成亂數,
下面是一些常用的亂數生成函式:
-
np.random.rand():生成 0 到 1 之間的隨機浮點數,可以接收任意個引數作為亂數生成器的形狀,
-
np.random.randn():生成符合標準正態分布的亂數,可以接收任意個引數作為亂數生成器的形狀,
-
np.random.randint():生成整數型的亂數,可以接收兩個引數:最小值和最大值,
-
np.random.random():生成 0 到 1 之間的隨機浮點數,可以接收一個引數作為輸出的形狀,
-
np.random.shuffle():隨機打亂一個序列,可以接收一個引數作為要打亂的序列,
-
np.random.choice():從指定的序列中隨機挑選一個元素,可以接收兩個引數:序列和挑選出元素的數量,
import numpy as np
# 生成一個形狀為 (3, 2) 的隨機浮點數陣列
arr1 = np.random.rand(3, 2)
# 生成一個形狀為 (3, 2) 的符合標準正態分布的亂數陣列
arr2 = np.random.randn(3, 2)
# 生成 0 到 9 之間的隨機整數
randint = np.random.randint(10)
# 生成一個形狀為 (1, 3) 的隨機浮點數陣列
arr3 = np.random.random((1, 3))
# 打亂一個序列
arr4 = np.arange(10)
np.random.shuffle(arr4)
# 從指定的序列中隨機挑選一個元素
choice = np.random.choice([1, 2, 3, 4, 5, 6], 1)
NumPy中NDArray物件有什么特點?
NumPy中NDArray(N-dimensional array)物件有以下特點:
-
它是多維陣列,可以表示任意維度的資料,
-
所有元素必須是同一型別的資料,
-
它支持向量化操作,即對整個陣列的操作只需要一條陳述句即可實作,
-
它快速且高效,因為它是使用C語言實作的,并且在記憶體使用和計算效率方面進行了優化,
-
它提供了大量的科學計算函式和方法,包括線性代數、傅里葉變換、統計分析等,
-
它易于與其他資料處理工具(如Pandas、SciPy等)集成使用,可以提高資料分析處理效率,并且支持大資料量的高效處理,
如何使用NumPy創建對角矩陣?
使用diag函式創建對角矩陣
import numpy as np
# 創建一個3x3的對角矩陣,對角線元素為1
diag_matrix = np.diag([1, 1, 1])
print(diag_matrix)
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
你也可以在diag函式中使用一個數字來創建對應大小的對角矩陣,
# 創建一個5x5的對角矩陣,對角線元素為2
diag_matrix = np.diag(2*np.ones(5))
print(diag_matrix)
array([[2., 0., 0., 0., 0.],
[0., 2., 0., 0., 0.],
[0., 0., 2., 0., 0.],
[0., 0., 0., 2., 0.],
[0., 0., 0., 0., 2.]])
如何使用NumPy進行陣列展平和拉伸操作?
NumPy提供了兩個方法flatten()和ravel()都可用于將多維陣列展平為一維陣列,不同之處在于ravel()回傳的是原陣列的視圖,而flatten()回傳的是原陣列的副本,下面是使用flatten()和ravel()方法展示多維陣列的方法:
1.使用flatten()方法
import numpy as np
# 創建一個2x3的二維陣列
a = np.array([[1, 2, 3], [4, 5, 6]])
# 展平陣列
b = a.flatten()
print('原陣列:')
print(a)
print('展平后的陣列:')
print(b)
原陣列:
[[1 2 3]
[4 5 6]]
展平后的陣列:
[1 2 3 4 5 6]
2.使用ravel()方法
import numpy as np
# 創建一個2x3的二維陣列
a = np.array([[1, 2, 3], [4, 5, 6]])
# 拉伸陣列
b = a.ravel()
print('原陣列:')
print(a)
print('拉伸后的陣列:')
print(b)
原陣列:
[[1 2 3]
[4 5 6]]
拉伸后的陣列:
[1 2 3 4 5 6]
如何在NumPy中進行陣列廣播操作?
NumPy的陣列廣播操作可以在不同形狀的陣列之間進行數學運算,簡化了陣列的操作和計算,陣列廣播主要遵循以下規則:
- 陣列維度不同,可以將維度較小的陣列延伸為維度較大的陣列,使它們的維度相等,
- 如果兩個陣列在某個維度上的形狀相同,或者其中一個陣列在該維度上的形狀為1,則稱它們在該維度上是兼容的,可以進行數學運算,
- 在任何維度上,如果一個陣列形狀為1,則可以沿著該維度擴展為另一個陣列的對應維度,
以下是一個示例,演示如何使用numpy進行陣列廣播:
import numpy as np
#創建兩個形狀不同的陣列
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
#列印兩個陣列的形狀
print("a.shape = ", a.shape)
print("b.shape = ", b.shape)
#使用陣列廣播計算a和b的和
c = a + b
print("a + b = \n", c)
a.shape = (3,)
b.shape = (3, 1)
a + b =
[[2 3 4]
[3 4 5]
[4 5 6]]
在這個示例中,我們創建了兩個陣列a和b,它們的形狀不同,然后,我們使用陣列廣播計算a和b的和,由于a和b的形狀不同,我們可以將維度較小的陣列b延伸為維度相等的陣列,以兼容它們之間的加法運算,最后,我們將結果存盤在新陣列c中,
如何使用NumPy進行陣列的切片和子集選擇?
NumPy可以使用切片和布爾索引來選擇陣列的子集,、
使用切片可以選擇陣列的某一部分,例如:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = a[1:4] # 選擇a[1]到a[3]的元素
print(b) # 輸出 [2 3 4]
也可以對多維陣列進行切片,例如:
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = a[0:2, 1:3] # 選擇a中第1列到第2列、第2行到第3行的元素
print(b) # 輸出 [[2 3]
# [5 6]]
使用布爾索引可以根據某種條件選擇陣列中的元素,例如:
a = np.array([1, 2, 3, 4, 5])
b = a[a > 2] # 選擇a中大于2的元素
print(b) # 輸出 [3 4 5]
也可以對多維陣列使用布爾索引,例如:
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = a[a > 2] # 選擇a中大于2的元素
print(b) # 輸出 [3 4 5 6 7 8 9]
注意,布爾索引回傳的是一維陣列,需要使用reshape方法將其轉換為多維陣列,可以使用np.where來進行更復雜的條件選擇,
如何使用NumPy進行矩陣運算和線性代數計算?
NumPy是Python語言的一個擴展庫,專門處理大型多維陣列與矩陣運算,NumPy提供了許多線性代數和矩陣操作函式,下面是使用NumPy進行矩陣運算的一些例子:
- 創建矩陣
要使用NumPy創建一個矩陣,可以使用numpy.array()函式,并將二維陣列傳遞給它,
import numpy as np
# 創建一個3x3的矩陣
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)
# 輸出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
- 矩陣轉置
要使用NumPy將矩陣轉置,可以使用numpy.transpose()函式,
import numpy as np
# 創建一個3x3的矩陣
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)
# 轉置矩陣
matrix_transpose = np.transpose(matrix)
print(matrix_transpose)
# 輸出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
- 矩陣相加和矩陣相減
要使用NumPy對矩陣進行加法和減法操作,可以使用numpy.add()和numpy.subtract()函式,
import numpy as np
# 創建兩個矩陣
matrix_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix_b = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])
# 矩陣相加
matrix_sum = np.add(matrix_a, matrix_b)
print(matrix_sum)
# 矩陣相減
matrix_diff = np.subtract(matrix_a, matrix_b)
print(matrix_diff)
# 輸出:
# [[10 10 10]
# [10 10 10]
# [10 10 10]]
# [[-8 -6 -4]
# [-2 0 2]
# [ 4 6 8]]
- 矩陣乘法
要使用NumPy進行矩陣乘法,可以使用numpy.dot()函式,
import numpy as np
# 創建兩個矩陣
matrix_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix_b = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])
# 矩陣乘法
matrix_prod = np.dot(matrix_a, matrix_b)
print(matrix_prod)
# 輸出:
# [[ 30 24 18]
# [ 84 69 54]
# [138 114 90]]
- 行列式和逆矩陣
要使用NumPy計算行列式和逆矩陣,可以使用numpy.linalg.det()和numpy.linalg.inv()函式,
import numpy as np
# 創建一個3x3的矩陣
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 計算矩陣的行列式
matrix_det = np.linalg.det(matrix)
print(matrix_det)
# 計算矩陣的逆矩陣
matrix_inv = np.linalg.inv(matrix)
print(matrix_inv)
# 輸出:
# 0.0
# [[-3.00000000e+00 6.00000000e+00 -3.00000000e+00]
# [ 6.00000000e+00 -1.20000000e+01 6.00000000e+00]
# [-3.00000000e+00 6.00000000e+00 -3.00000000e+00]]
這些只是NumPy中可用的許多矩陣運算之一,NumPy庫還提供了其他矩陣運算,如解線性方程組等等 逆矩陣可以計算其它方面的線性代數問題,如解線性方程組,這是資料科學中不可或缺的,
如何使用NumPy進行資料的離散化和分組操作?
使用NumPy進行資料的離散化和分組操作可以使用numpy.digitize和numpy.bincount函式,
numpy.digitize函式可以將一組資料劃分為不同的區間,回傳每個資料所屬的區間編號;numpy.bincount函式可以統計每個區間內資料的數量,這兩個函式的聯合使用可以實作資料的離散化和分組操作,
例如,對資料進行10個區間的離散化,并統計每個區間內資料的數量可以使用以下代碼:
import numpy as np
data = https://www.cnblogs.com/yyyyfly1/p/np.array([1, 4, 8, 3, 6, 9, 2, 5, 7, 10])
bins = np.linspace(0, 10, 11) # 劃分為10個區間
indices = np.digitize(data, bins) # 劃分資料所屬區間
counts = np.bincount(indices)
上述代碼執行完畢后,counts陣列中即為每個區間內資料的數量,可以在此基礎上進行更多操作,例如計算每個區間內資料的平均值等,
NumPy如何進行陣列的輸入和輸出?
NumPy可以通過多種方式進行陣列的輸入和輸出,包括文本檔案、二進制檔案、記憶體緩沖等,
下面是一些常見的陣列輸入和輸出的方法和示例:
- 從文本檔案讀取陣列:
- 將陣列保存到文本檔案中:
- 從二進制檔案讀取陣列:
- 將陣列保存到二進制檔案中:
- 從記憶體緩沖讀取陣列:
- 將陣列保存到記憶體緩沖中:
import numpy as np
import io
# 從文本檔案讀取陣列
data = https://www.cnblogs.com/yyyyfly1/p/np.loadtxt('data.txt')
print(data)
# 將陣列保存到文本檔案中
data = https://www.cnblogs.com/yyyyfly1/p/np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.savetxt('data.txt', data)
# 從二進制檔案讀取陣列
data = https://www.cnblogs.com/yyyyfly1/p/np.load('data.npy')
print(data)
# 將陣列保存到二進制檔案中
data = https://www.cnblogs.com/yyyyfly1/p/np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('data.npy', data)
# 從記憶體緩沖讀取陣列
str_data = 'https://www.cnblogs.com/yyyyfly1/p/1 2 3/n4 5 6/n7 8 9'
data = https://www.cnblogs.com/yyyyfly1/p/np.genfromtxt(str_data.splitlines(), delimiter=' ')
print(data)
# 將陣列保存到記憶體緩沖中
data = https://www.cnblogs.com/yyyyfly1/p/np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
output = io.StringIO()
np.savetxt(output, data, delimiter=',')
str_data = https://www.cnblogs.com/yyyyfly1/p/output.getvalue()
print(str_data)
除此之外,NumPy還提供了很多其他的輸入和輸出方式,如Pandas DataFrame、HDF5等,具體可以查閱官方檔案,
在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在,轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554658.html
標籤:Python
下一篇:返回列表
