目錄
一、前言
二、實驗環(huán)境
三、NumPy
0、多維數(shù)組對象(ndarray)
多維數(shù)組的屬性
1、創(chuàng)建數(shù)組
2、數(shù)組操作
3、數(shù)組數(shù)學(xué)
4、數(shù)組廣播
5、排序操作
1. np.sort()?函數(shù)
2. np.argsort()?函數(shù)
3. ndarray.sort()?方法
4. 按列或行排序
5. np.lexsort()?函數(shù)
6. np.partition()?函數(shù)
7. np.argpartition()?函數(shù)
8. ndarray.argsort()?方法
一、前言
????????Python是一種高級編程語言,由Guido van Rossum于1991年創(chuàng)建。它以簡潔、易讀的語法而聞名,并且具有強大的功能和廣泛的應(yīng)用領(lǐng)域。Python具有豐富的標(biāo)準(zhǔn)庫和第三方庫,可以用于開發(fā)各種類型的應(yīng)用程序,包括Web開發(fā)、數(shù)據(jù)分析、人工智能、科學(xué)計算、自動化腳本等。
????????Python本身是一種偉大的通用編程語言,在一些流行的庫(numpy,scipy,matplotlib)的幫助下,成為了科學(xué)計算的強大環(huán)境。本系列將介紹Python編程語言和使用Python進(jìn)行科學(xué)計算的方法,主要包含以下內(nèi)容:
- Python:基本數(shù)據(jù)類型、容器(列表、元組、集合、字典)、函數(shù)、類
- Numpy:數(shù)組創(chuàng)建、數(shù)組操作、數(shù)組數(shù)學(xué)、廣播
- Matplotlib:繪圖風(fēng)格和類型、圖表自定義、多子圖和布局
- IPython:創(chuàng)建筆記本、典型工作流程
?二、實驗環(huán)境
matplotlib | 3.5.3 | |
numpy | 1.21.6 | |
python | 3.7.16 |
- 運行下述命令檢查Python版本
python --version
- 運行下述代碼檢查Python、NumPy、Matplotlib版本
import sys
import numpy as np
import matplotlib
print("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)
print("matplotlib 版本:", matplotlib.__version__)
三、NumPy
????????NumPy(Numerical Python)是一個用于科學(xué)計算的Python庫。它提供了一個強大的多維數(shù)組對象(ndarray),用于進(jìn)行高效的數(shù)值運算和數(shù)據(jù)處理。Numpy的主要功能包括:
多維數(shù)組:Numpy的核心是ndarray對象,它是一個多維數(shù)組,可以存儲同類型的元素。這使得Numpy非常適合處理向量、矩陣和其他多維數(shù)據(jù)結(jié)構(gòu)。
數(shù)學(xué)函數(shù):Numpy提供了許多常用的數(shù)學(xué)函數(shù),如三角函數(shù)、指數(shù)函數(shù)、對數(shù)函數(shù)等。這些函數(shù)可以直接應(yīng)用于整個數(shù)組,而無需編寫循環(huán)。
廣播(Broadcasting):Numpy支持不同形狀的數(shù)組之間的運算,通過廣播機制,可以對形狀不同的數(shù)組進(jìn)行逐元素的操作,而無需顯式地編寫循環(huán)。
線性代數(shù)運算:Numpy提供了豐富的線性代數(shù)運算函數(shù),如矩陣乘法、求解線性方程組、特征值計算等。
隨機數(shù)生成:Numpy包含了用于生成各種概率分布的隨機數(shù)的函數(shù),如均勻分布、正態(tài)分布、泊松分布等。
數(shù)據(jù)操作:Numpy提供了很多用于操作數(shù)組的函數(shù),如切片、索引、排序、去重等。
????????Numpy廣泛應(yīng)用于科學(xué)計算、數(shù)據(jù)分析、機器學(xué)習(xí)等領(lǐng)域。它的高效性和便捷性使得它成為Python數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)中不可或缺的組成部分。
0、多維數(shù)組對象(ndarray)
????????NumPy的ndarray
對象是NumPy庫中最重要的對象之一,也是進(jìn)行科學(xué)計算的核心數(shù)據(jù)結(jié)構(gòu)。ndarray
代表了一個多維的數(shù)組,可以存儲相同類型的元素。
多維數(shù)組的屬性
-
ndarray.shape
:返回表示數(shù)組形狀的元組,例如(2, 3)
表示2行3列的數(shù)組。 -
ndarray.dtype
:返回數(shù)組中元素的數(shù)據(jù)類型,例如int
、float
、bool
等。 -
ndarray.ndim
:返回數(shù)組的維度數(shù),例如1表示一維數(shù)組,2表示二維數(shù)組。
1、創(chuàng)建數(shù)組
【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(九):NumPy詳解:1、創(chuàng)建數(shù)組的n種方式_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501
2、數(shù)組操作
【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(十):NumPy詳解:2、數(shù)組操作(索引和切片、形狀操作、轉(zhuǎn)置操作、拼接操作)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501
3、數(shù)組數(shù)學(xué)
【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(十一):NumPy詳解:3、數(shù)組數(shù)學(xué)(元素、數(shù)組、矩陣級別的各種運算)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132863360?spm=1001.2014.3001.5501
4、數(shù)組廣播
????????NumPy廣播(Broadcast)是指在不同形狀的數(shù)組之間進(jìn)行運算的一種機制。它允許我們在不顯式復(fù)制數(shù)據(jù)的情況下,對具有不同形狀的數(shù)組進(jìn)行逐元素的操作。廣播可以使我們更方便地進(jìn)行數(shù)組運算,提高代碼的簡潔性和效率。
在進(jìn)行廣播運算時,NumPy遵循一套嚴(yán)格的規(guī)則:
-
?數(shù)組維度不同時,將維度較小的數(shù)組進(jìn)行擴展,使其與維度較大的數(shù)組具有相同的維度數(shù)。
-
如果兩個數(shù)組在某個維度上的形狀相等,或其中一個數(shù)組在該維度上的形狀為1,則認(rèn)為它們在該維度上是兼容的。
-
如果兩個數(shù)組在所有維度上都是兼容的,它們可以一起進(jìn)行廣播。
-
在廣播中,沿著形狀中為1的維度進(jìn)行復(fù)制,以使兩個數(shù)組具有相同的形狀。?
????????廣播的過程是自動進(jìn)行的,無需顯式編寫循環(huán)或復(fù)制數(shù)據(jù)。讓我們通過一個具體的示例來說明廣播的工作原理:
import numpy as np
# 創(chuàng)建兩個數(shù)組
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])
# 進(jìn)行廣播運算
c = a + b
print(c)
????????在這個例子中,數(shù)組a
的形狀是(3,)
,數(shù)組b
的形狀是(2, 3)
。根據(jù)廣播的規(guī)則,a
的形狀會被擴展為(2, 3)
,然后兩個數(shù)組逐元素相加,得到結(jié)果數(shù)組c
。輸出結(jié)果如下:
[[ 5 7 9]
[ 8 10 12]]
????????通過廣播,我們可以在不改變數(shù)組形狀的情況下,對不同形狀的數(shù)組進(jìn)行逐元素的操作。這使得我們可以更靈活地處理數(shù)據(jù),并編寫更簡潔的代碼。需要注意的是,雖然廣播可以方便地進(jìn)行數(shù)組運算,但在某些情況下可能會引起歧義或錯誤的結(jié)果。因此,在使用廣播時,建議仔細(xì)理解廣播規(guī)則,并確保操作的正確性。
5、排序操作
1. np.sort()
?函數(shù)
????????該函數(shù)返回一個數(shù)組的排序副本
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 對數(shù)組進(jìn)行排序
b = np.sort(a)
print(b)
# 輸出: [1 2 3 4 5]
2. np.argsort()
?函數(shù)
????????該函數(shù)返回數(shù)組排序后的索引。
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 返回排序后的索引
indices = np.argsort(a)
print(indices)
# 輸出: [1 3 0 2 4]
3. ndarray.sort()
?方法
????????該方法原地對數(shù)組進(jìn)行排序,不返回副本。
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 原地對數(shù)組進(jìn)行排序
a.sort()
print(a)
# 輸出: [1 2 3 4 5]
4. 按列或行排序
????????可以指定?axis
?參數(shù)來按列或行對二維數(shù)組進(jìn)行排序。
import numpy as np
a = np.array([[3, 1, 4], [2, 5, 0]])
# 按列排序
b = np.sort(a, axis=0)
print(b)
# 輸出:
# [[2 1 0]
# [3 5 4]]
# 按行排序
c = np.sort(a, axis=1)
print(c)
# 輸出:
# [[1 3 4]
# [0 2 5]]
5. np.lexsort()
?函數(shù)
????????該函數(shù)根據(jù)鍵的字典順序?qū)Χ鄠€序列進(jìn)行間接排序。
import numpy as np
a = np.array([[3, 1, 4], [2, 5, 0]])
names = np.array(['Tom', 'John'])
# 使用lexsort進(jìn)行間接排序
indices = np.lexsort((names, a[:, 0]))
print(indices)
# 輸出: [1 0]
sorted_data = a[indices]
print(sorted_data)
# 輸出:
# [[2 5 0]
# [3 1 4]]
6. np.partition()
?函數(shù)
????????該函數(shù)可以在數(shù)組中進(jìn)行分區(qū)操作,將數(shù)組分割為滿足指定條件的兩個部分。分區(qū)后,左側(cè)的元素都小于或等于右側(cè)的元素,但它們之間的順序是未定義的。
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 對數(shù)組進(jìn)行分區(qū)
b = np.partition(a, 2)
print(b)
# 輸出: [1 2 3 4 5]
7. np.argpartition()
?函數(shù)
????????該函數(shù)返回分區(qū)操作后的索引?
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 返回分區(qū)后的索引
indices = np.argpartition(a, 2)
print(indices)
# 輸出: [1 3 0 2 4]
8. ndarray.argsort()
?方法
????????該方法返回數(shù)組排序后的索引,類似于?np.argsort()
?函數(shù)。
import numpy as np
a = np.array([3, 1, 4, 2, 5])
# 返回排序后的索引
indices = a.argsort()
print(indices)
# 輸出: [1 3 0 2 4]
9. np.searchsorted()
?函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-709747.html
????????該函數(shù)用于在已排序的數(shù)組中查找指定元素應(yīng)該插入的位置,以9.保持排序順序。文章來源地址http://www.zghlxwxcb.cn/news/detail-709747.html
import numpy as np
a = np.array([1, 3, 4, 4, 6])
# 查找元素應(yīng)該插入的位置
index = np.searchsorted(a, 5)
print(index)
# 輸出: 4
到了這里,關(guān)于【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(十二):NumPy詳解:4、數(shù)組廣播;5、排序操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!