Numpy是Python中最常用的數(shù)學(xué)庫之一,它集成了許多最佳的數(shù)學(xué)函數(shù)和操作。Numpy的使用非常廣泛,包括統(tǒng)計(jì)、線性代數(shù)、圖像處理、機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等領(lǐng)域。在數(shù)據(jù)分析和建模方面,Numpy更是必不可少的工具之一。本文將分享Numpy常用的數(shù)學(xué)函數(shù),以及使用這些函數(shù)實(shí)現(xiàn)數(shù)據(jù)分析和建模的示例代碼。
一、創(chuàng)建數(shù)組
使用Numpy中array()
函數(shù)可以創(chuàng)建一個(gè)數(shù)組,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr)
登錄后復(fù)制
這會(huì)輸出 [1 2 3 4 5],表示創(chuàng)建了一個(gè)一維數(shù)組。
我們還可以創(chuàng)建一個(gè)二維數(shù)組,代碼示例:
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr)
登錄后復(fù)制
這會(huì)輸出:
[[1 2 3] [4 5 6]]
登錄后復(fù)制
表示創(chuàng)建了一個(gè)二維數(shù)組。
二、數(shù)組屬性
使用Numpy中的ndim
、shape
和size
屬性可以獲取數(shù)組的維度、形狀和元素個(gè)數(shù),代碼示例:
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.ndim) # 輸出 2,表示數(shù)組是二維的 print(arr.shape) # 輸出 (2, 3),表示數(shù)組有2行3列 print(arr.size) # 輸出 6,表示數(shù)組有6個(gè)元素
登錄后復(fù)制
三、數(shù)組的運(yùn)算
Numpy數(shù)組可以進(jìn)行加、減、乘、除等運(yùn)算。首先看一下給數(shù)組加一個(gè)標(biāo)量的運(yùn)算,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr + 2) # 輸出 [3 4 5 6 7]
登錄后復(fù)制
表示數(shù)組中的每個(gè)元素都加上了2。
接下來是兩個(gè)數(shù)組相加的運(yùn)算,代碼示例:
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) print(arr1 + arr2) # 輸出 [5 7 9]
登錄后復(fù)制
表示兩個(gè)數(shù)組中對(duì)應(yīng)的元素相加。
Numpy還提供了一些特定的運(yùn)算,例如:
平方運(yùn)算:使用power()
函數(shù),代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(np.power(arr, 2)) # 輸出 [ 1 4 9 16 25]
登錄后復(fù)制
這表示數(shù)組中的每個(gè)元素都平方了。
開方運(yùn)算:使用sqrt()
函數(shù),代碼示例:
import numpy as np arr = np.array([1, 4, 9, 16, 25]) print(np.sqrt(arr)) # 輸出 [1. 2. 3. 4. 5.]
登錄后復(fù)制
這表示數(shù)組中的每個(gè)元素都開方了。
求和:使用sum()
函數(shù),代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(np.sum(arr)) # 輸出 15
登錄后復(fù)制
這表示數(shù)組中的所有元素求和。
求最大值和最小值:使用max()
和min()
函數(shù),代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(np.max(arr)) # 輸出 5,表示數(shù)組中的最大值 print(np.min(arr)) # 輸出 1,表示數(shù)組中的最小值
登錄后復(fù)制
四、數(shù)組的索引和切片
我們可以使用下標(biāo)來訪問數(shù)組中的元素,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[0]) # 輸出 1,表示數(shù)組中的第一個(gè)元素
登錄后復(fù)制
我們還可以對(duì)數(shù)組進(jìn)行切片操作,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[1:4]) # 輸出 [2 3 4],表示從數(shù)組中取出第2個(gè)到第4個(gè)元素
登錄后復(fù)制
五、數(shù)組形狀的變換
Numpy中提供了一些函數(shù)用于改變數(shù)組的形狀,其中之一是reshape()
函數(shù)。我們可以使用reshape()
函數(shù)重塑數(shù)組的形狀,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr.reshape(5, 1))
登錄后復(fù)制
這會(huì)返回一個(gè)形狀為(5, 1)的二維數(shù)組:
[[1] [2] [3] [4] [5]]
登錄后復(fù)制
六、數(shù)組的合并與拆分
Numpy中提供了一些函數(shù)用于合并和拆分?jǐn)?shù)組。
我們可以使用concatenate()
函數(shù)將兩個(gè)數(shù)組沿著某個(gè)維度合并,代碼示例:
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) print(np.concatenate((arr1, arr2))) # 輸出 [1 2 3 4 5 6]
登錄后復(fù)制
我們還可以使用vstack()
和hstack()
函數(shù)將兩個(gè)數(shù)組水平或垂直堆疊在一起,代碼示例:
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) # 垂直堆疊 print(np.vstack((arr1, arr2))) # 輸出 [[1 2 3] [4 5 6]] # 水平堆疊 print(np.hstack((arr1, arr2))) # 輸出 [1 2 3 4 5 6]
登錄后復(fù)制
我們還可以使用split()
函數(shù)將一個(gè)數(shù)組拆分成多個(gè)數(shù)組,代碼示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(np.split(arr, 5)) # 輸出 [array([1]), array([2]), array([3]), array([4]), array([5])]
登錄后復(fù)制
這會(huì)將數(shù)組拆分成5個(gè)一維數(shù)組,每個(gè)數(shù)組中只包含一個(gè)元素。
七、綜合示例
現(xiàn)在,我們將使用Numpy中的函數(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)分析和建模的例子。
示例:假設(shè)你有100個(gè)學(xué)生的成績(jī),你想計(jì)算他們的平均成績(jī)、最高成績(jī)和最低成績(jī)。
首先,我們用random()
函數(shù)生成100個(gè)隨機(jī)數(shù),并使用mean()
、max()
和min()
函數(shù)計(jì)算它們的平均值、最高值和最低值,代碼示例:
import numpy as np grades = np.random.randint(50, 100, 100) # 生成50到100之間的100個(gè)隨機(jī)數(shù) print("平均成績(jī):", np.mean(grades)) print("最高成績(jī):", np.max(grades)) print("最低成績(jī):", np.min(grades))
登錄后復(fù)制
接下來,我們將使用histogram()
函數(shù)生成一個(gè)成績(jī)的直方圖,代碼示例:
import matplotlib.pyplot as plt import numpy as np grades = np.random.randint(50, 100, 100) # 生成50到100之間的100個(gè)隨機(jī)數(shù) hist, bins = np.histogram(grades, bins=10, range=(50, 100)) plt.hist(grades, bins=10, range=(50, 100)) plt.show()
登錄后復(fù)制
最后,我們將使用percentile()
函數(shù)計(jì)算成績(jī)的百分位數(shù),代碼示例:
import numpy as np grades = np.random.randint(50, 100, 100) # 生成50到100之間的100個(gè)隨機(jī)數(shù) print("90%的成績(jī)高于:", np.percentile(grades, 90))
登錄后復(fù)制