Numpy庫學習筆記——利用Pycharm

#!/user/bin/env python3# _*_ coding: utf-8 _*_# 程式設計: 王智勇(13370892288 729627596@qq。com)# 工作單位: 青島未來城(鄉)設計研究院有限公司# ————————————————————————————————————————————————————# 參考:https://www。toutiao。com/a6843660611235086851import timeimport numpy as npimport cv2import matplotlib。pyplot as pltfrom timeit import timeitimport imageioprint(“”“ 目錄 1、NumPy庫是什麼? 2、Python列表與NumPy陣列有什麼區別? 3、建立NumPy陣列、 基本的ndarray全0陣列、全1陣列; ndarray中的隨機數 定製的陣列、NumPy的Imatrix(開源開發平臺) 等間距的ndarray 4、NumPy陣列的形狀與重塑 NumPy陣列的維數 NumPy陣列的形狀 NumPy陣列的大小 重塑NumPy陣列 展開NumPy陣列 NumPy陣列的轉置 5、擴充套件和壓縮一個NumPy陣列 展開NumPy陣列 壓縮NumPy陣列 6、NumPy陣列的索引與切片 一維陣列的切片 二維陣列切片 三維陣列切片 NumPy陣列的負切片 7、堆疊和級聯 Numpy陣列堆疊 ndarrays級聯ndarrays 8、Numpy陣列廣播 9、NumPy Ufuncs10、用NumPy陣列計算平均值、中位數和標準差最小最大值及其索引11、在NumPy陣列中排序12、NumPy陣列和影象”“”)# time。sleep(2)# ————————————————>> 1、Numpy庫是什麼? <<——————————————-print(“”“ ————————————————>> 1、Numpy庫是什麼? <<——————————————- NumPy是Python數值庫,是Python程式設計中最有用的科學庫之一。它支援大型多維陣列物件和各種工具。 各種其他的庫,如Pandas、Matplotlib和Scikit-learn,都建立在這個令人驚歎的庫之上。 陣列是元素/值的集合,可以有一個或多個維度。一維陣列稱為向量,二維陣列稱為矩陣。 NumPy陣列稱為ndarray或N維陣列,它們儲存相同型別和大小的元素。 它以其高效能而聞名,並在陣列規模不斷擴大時提供高效的儲存和資料操作。 下載Anaconda時,NumPy會預先安裝。但是如果你想在你的機器上單獨安裝NumPy,只需在你的終端上鍵入以下命令: pip install numpy # numpy庫安裝 import numpy as np # 匯入Numpy庫 np————->>是資料科學界使用Numpy庫是的習慣縮寫”“”)# time。sleep(2)# ————————————->> 2、Python列表與Numpy陣列有什麼區別 <<——————————-print(“”“ ————————————->> 2、Python列表與Numpy陣列有什麼區別 <<——————————- 既然在Python中列表可以用來儲存各種型別資料的陣列,為什麼還要使用Numpy陣列??? 主要原因是Python在記憶體中儲存物件的方式造成的: 1)Python物件:——->>實際上是一個指向記憶體位置的指標, 該記憶體位置儲存有關該物件的所有詳細資訊,如位元組和值。儘管這些額外的資訊使Python成為一種動態型別語言, 但它也付出了代價,這在儲存大量物件(如在陣列中)時變得顯而易見。 2)Python列表:————>>本質上是一個指標陣列, 每個指標指向一個包含與元素相關資訊的位置。 這在記憶體和計算方面增加了很多開銷。當列表中儲存的所有物件都是同一型別時,大多數資訊都是冗餘的! Numpy陣列避免了這些缺點: 1)Numpy陣列只包含 同構元素, 即具有資料型別的元素。這使得它在儲存和運算元組封面更加高效。 2)使用NumPy陣列,你可以執行 元素操作, 這是使用Python列表不可能做到的!”“”)# time。sleep(2)# ————————————->> 3、建立Numpy陣列 <<————————————————-print(“”“ ——————————————>> 3、建立Numpy陣列 <<—————————————————— 3。1 基本的ndarray 基本方法: np。array() 只需要將陣列的值作為列表傳遞”“”)# 例如:print( np。array([1, 2, 3, 4]), # 最基本操作)# time。sleep(2) # 單位:秒print(“\n\t\t”, np。array([1, 2, 3, 4], dtype=np。float32) # 可以在dtype引數中制定資料型別 )print(“\n\t\t”, np。array([1, 2。0, 3, 4]) # 由於Numpy陣列只包含同構資料型別,如果不匹配則向上轉換值。 # 在這裡,NumPy將整數值上移到浮點值。 )print(“\n”, np。array([[1, 2。0, 3, 4], [5, 6, 7, 8], [1, 4, 3。2, 5。6]]) # Numpy陣列也可以是多維的。 )na = np。array([[1, 2。0, 3, 4], [5, 6, 7, 8], [1, 4, 3。2, 5。6]]) # 在這兒建立了一個三維陣列,3x4矩陣print(na)print(“\n\t\t\t多維陣列,也叫矩陣——->>注:矩陣只是一個NxM形狀的數字矩形陣列,其中N是行數,M是矩陣中的列數。”)print(“”“_______________________________________________________________________________________________ 3。2 全零陣列 NumPy允許你使用 np。zeros() 方法。你只需傳遞所需陣列的形狀: ”“”)print( np。zeros(5) # 這是一維陣列)print(“\n”, np。zeros((2, 4)) # 這是二維陣列 )print(“”“_______________________________________________________________________________________________ 3。3 全1陣列 NumPy允許你使用 np。ones() 方法。你只需傳遞所需陣列的形狀:”“”)print( np。ones(5), “\n”, # 這是一維陣列 np。ones(5, dtype=np。int32) # 這是一維陣列,資料格式為dtype=np。ine32)print(np。ones((4, 4)) # 這是二維陣列 )np_array_1 = np。ones((4, 4), dtype=np。int32)print(np_array_1)print(“”“_______________________________________________________________________________________________ 3。4 ndarray中的隨機數 用於建立 給定形狀 的隨機值 介於[0,1] 的隨機數陣列的方法: np。random。rand()”“”)# time。sleep(1)print( np。random。rand(2, 3) # 建立給定的2行三列的給定形狀的隨機數陣列)print(“”“_______________________________________________________________________________________________ 3。5 定製的陣列 只需傳入所需陣列的——->>形狀和值<<————方法: np。full()”“”)# time。sleep(1)print( np。full((2, 3), 5) # 建立2行三列值為5的陣列;)print(“”“_______________________________________________________________________________________________ 3。6 Numpy的單位矩陣(Identity matrix) 單位矩陣:在矩陣的乘法中,有一種矩陣起著特殊的作用,如同數的乘法中的1,這種矩陣被稱為單位矩陣。 它是個正方形矩陣(方陣),從左上角到右下角的對角線(稱為主對角線)上的元素均為1。除此以外全都為0。 特 性:AI=IA=I 特 點:主對角線上元素都是1 單位矩陣:Identity matrix ——->> np。eye() <<————方法 正方形矩陣:N X N的形狀,具有相同數量的行和列”“”)# time。sleep(1)print( np。eye(5) # 建立5行5列的單位矩陣;)print( np。eye(5, k=1), # 建立5行5列的單位矩陣 “\n\n”, # np。eye(5, k=2), # Numpy允許靈活地修改對角線, 值必須是1 ,你可以將其平移到主對角線的上下方 “\n\n”, # np。eye(5, k=-3), # 以實現不同的多項式乘法)print(“”“_______________________________________________________________________________________________ 3。7 等間距的ndarray生成器————>等步長的序列 方法 ——->> np。arange(開始,結束,步長) <<————方法 注意:透過分別傳遞三個數字作為這些值的引數,可以 顯式 定義值間隔的 開始、結束和步長。 要注意的一點是,間隔定義為[開始,結束],其中最後一個數字將不包含在陣列中。 1) 一個引數時,引數值為終點,起點取預設值0,步長取預設值1。 2)兩個引數時,第一個引數為起點,第二個引數為終點,步長取預設值1。 3)三個引數時,第一個引數為起點,第二個引數為終點,第三個引數為步長。其中步長支援小數 但是:::當浮點引數時,可能會導致精度損失,造成不可預測的結果…… ”“”)# time。sleep(1)print(“\n”, np。arange(5), “\n”, # 一個引數,終點為5,起點為預設為0,步長預設為1 np。arange(2, 9), “\n”, # 2個引數,起點=2,終點=9,步長=1 np。arange(3, 15, 3), “\n”, # 三個引數,起點=3,終點=15,步長=3——>不包括終點=15 np。arange(1, 4, 0。25), “\n”, # 三個引數,起點=1,終點=4,步長=0。25(小數)——>不包括終點=4 np。arange(1。2, 4。5, 0。25), “\n”, # 三個引數,起點=1。2,終點=4。5,步長=0。25(小數)——>不包括終點=4 )print(“”“_______________________________________________________________________________________________ 3。8 序列生成器——>線上性空間中以均勻步長生成數字序列 方法 ——->> np。linspace(開始,結束,元素個數) <<————方法 注意: Numpy通常可以使用numpy。arange()生成序列,但是當我們使用浮點引數時,可能會導致精度損失, 這可能會導致不可預測的輸出。為了避免由於浮點精度而造成的任何精度損失, numpy在numpy。linspace()為我們提供了一個單獨的序列生成器,如果您已經知道 所需的元素個數,則這是首選。 但是通常使用帶有適當引數的linspace()和 arange()可以得到相同的輸出,因此可以為同一任務選擇兩者。”“”)# time。sleep(1)# 以下程式碼使用numpy。linspace()在0到10之間繪製2個線性序列,以顯示該序列生成的均勻性。# 參考:https://www。w3cschool。cn/article/54960412。html# y = np。ones(5) # 生成1行5列的全1陣列## x1 = np。linspace(10, 20, 5) # 生成從10到20的5個步長# print(x1) # [10。 12。5 15。 17。5 20。 ]## x2 = np。linspace(10, 20, 5)# print(x2) # [10。 12。5 15。 17。5 20。 ]# plt。plot(x1, y, ‘o’)## plt。plot(x2, y + 0。5, ‘o’)## plt。ylim([0。5, 2]) # 用於獲取和設定當前軸的y-limits## plt。title(“np。linspace(*args, **kwargs)”)## plt。show()# plt。close()# time。sleep(1)# time。sleep(2) ====================================================================# ————————————->> 4、Numpy陣列的形狀與重塑 <<————————————————-print(“”“ ——————————————>> 4、Numpy陣列的形狀與重塑 <<—————————————————— 4。1 Numpy的陣列的維數、形狀和大小_________屬性 維數:使用Numpy陣列的 ndim屬性 確定ndarray的維數。即某元素可以表示為a[i][j][k] == 當用陣列下標表示的時候,需要用幾個數字來表示才能唯一確定這個元素,這個陣列就是幾維。 取得一個確切的元素, 即 行列頁 用b[i][j][k]的格式,陣列嵌套了3層,第一層有2個元素,第二層也是2個元素,第三層有三個元素 參考:https://www。zhihu。com/question/64894713 形狀:使用Numpy陣列的 shape屬性 確定ndarray的形狀。 它顯示每個維度上有多少行元素 大小:使用Numpy陣列的 size屬性 確定ndarray有多少個值。size大小=行數*列數”“”)a = np。eye(5)print(“Numpy的ndarray陣列a的內容是:”, “\n”, a)print(“Numpy的ndarray陣列a的維數是:”, “\t\t”, a。ndim)b = np。array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])c = np。array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]]])d = np。array([1, 2, 3, 4, 5, 6])print()print(“array a:”, a)print(“array b:”, b)print(“array c:”, c)print(“array d:”, d)print()print(“array_b dimensions:”, a。ndim)print(“array_b Dimensions:”, b。ndim)print(“array_c Dimensions:”, c。ndim)print(“array_d dimensions:”, d。ndim)print()print(“Numpy陣列a的形狀是:”, a。shape)print(“Numpy陣列b的形狀是:”, b。shape)print(“Numpy陣列c的形狀是:”, c。shape)print(“Numpy陣列d的形狀是:”, d。shape)print()print(“Numpy陣列a的大小是:”, a。size)print(“Numpy陣列b的大小是:”, b。size)print(“Numpy陣列c的大小是:”, c。size)print(“Numpy陣列d的大小是:”, d。size)print(“”“ ————————————————————————————————————————————- 4。2 Numpy陣列的重塑 Numpy陣列的重塑:在不改變ndarray中的資料的情況下改變ndarray的形狀 方法: ————>>np。reshape()<<————-”“”)a = np。array([2, 4, 6, 8, 10, 12])print(a, “\n\n”, np。reshape(a, (2, 3)) # 將a從一維重塑為二維ndarray )print(“重置為三行Numpy陣列:”, “\n\n”, np。reshape(a, (3, -1)) # 重塑時,如果不確定任何軸的形狀,只需輸入-1。它會自動計算形狀 )print(“重置為三列的Numpy陣列:”)print(np。reshape(a, (-1, 3)))print(“”“ ————————————————————————————————————————————- 4。3 Numpy陣列的展開 Numpy陣列的展開:將多維陣列並希望將其摺疊為一維陣列 方法: ————>>flatten()或ravel()<<————-”“”)a = np。eye(3) # a = np。ones((3,3))b = a。flatten()c = a。ravel()print(a。shape, “\n”, a # 生成一個3行3列的單位矩陣 )print( b。shape, “\n”, b, # 將a用 a。flatten() 方法展開成一維陣列)print( c。shape, “\n”, c # 將a用 a。ravel() 方法展開成一維陣列)print(“”“————————————>> flatten()和ravel()的區別 <<————————————flatten()方法返回的是原始陣列的 副本 ==深層副本ravel()方法返回的是原始陣列的 引用 ==淺層副本*******對ravel()返回的陣列所做的任何更改也將反映在原始陣列中,而flatten()則不會這樣。****”“”)# 一下是顯示 flatten()和ravel()的區別影象# img1 = cv2。imread(‘E:\\BaiduNetdiskWorkspace\\python\\pycharm2021。2。3-Learn\\Numpy-lib\\img\\flatten-ravel。png’, -1)# cv2。imshow(‘image’, img1)# cv2。waitKey(0) # 等待時間毫秒 0——無限線等待# cv2。destroyAllWindows()## time。sleep(0)## img2 = cv2。imread(“C:\\Users\\Administrator\\Pictures\\WYD-20211221。jpg”, 1)# cv2。imshow(‘image’, img2)# cv2。waitKey(0)# cv2。destroyAllWindows()# flatten()和ravel()方法的區別影象展示結束print(“”“ ————————————————————————————————————————————- 4。4 Numpy陣列的轉置 Numpy陣列的轉置:將矩陣的行列互換得到的新矩陣稱為轉置矩陣,轉置矩陣的行列式不變。 A為m×n矩陣,則其轉置矩陣為n×m的矩陣記為AT 方法: ————>> np。transpose()方法 <<————-”“”)a_1 = np。array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])print(“ndarray原始矩陣a_1:”, ‘\n\b’, a_1, “\n”, “原始矩陣a的形狀是:”, a_1。shape)b = np。transpose(a_1)print(b)# a = np。array([[1, 2, 3], [4, 5, 6]])# b = np。transpose(a)# print(‘Original’, ‘\n’, ‘Shape’, a。shape, ‘\n’, a)# print(‘Expand along columns:’, ‘\n’, ‘Shape’, b。shape, ‘\n’, b)# time。sleep(2) ====================================================================# ————————————->> 5、Numpy陣列的擴充套件和壓縮 <<————————————————-print(“”“ ——————————————>> 5、Numpy陣列的擴充套件和壓縮 <<—————————————————— 5。1 Numpy的陣列的擴充套件 透過提供要展開的陣列和軸,可以使用————>>np。expand_dims()<<————-方法將新軸新增到陣列中: ”“”)a = np。array([1, 2, 3])b = np。expand_dims(a, axis=0)c = np。expand_dims(a, axis=1)print(‘Original:’, ‘\n’, ‘Shape’, a。shape, ‘\n’, a) # Shape (3,) [1 2 3]print(‘Expand along columns:’, ‘\n’, ‘Shape’, b。shape, ‘\n’, b) # Shape (1, 3) [[1 2 3]]print(‘Expand along rows:’, ‘\n’, ‘Shape’, c。shape, ‘\n’, c) # Shape (3, 1) [[1]# [2]# [3]]print(“”“ ————————————————————————————————————————————- 5。2 Numpy陣列的壓縮 如果希望減小陣列的軸,請使用————->>np。squeeze()方法<<——————刪除具有單個條目的軸 如果建立了一個2 x 2 x 1矩陣,則squeze()將從矩陣中刪除第三個維度:”“”)# np。squeeze()方法a = np。array([[[10, 4, 3], [6, 15, 16]]])b = np。squeeze(a, axis=0)print(‘Original’, ‘\n’, ‘Shape’, a。shape, ‘\n’, a)print(‘Squeeze array:’, ‘\n’, ‘Shape’, b。shape, ‘\n’, b)# 如果你已經有一個2×2的矩陣,在這種情況下使用squeeze()會給你一個錯誤:# squeeze# a = np。array([[1, 2, 3],# [4, 5, 6]])# b = np。squeeze(a, axis=0)# print(‘Original’, “\n”, ‘Shape’, a。shape, ‘\n’, a)# print(‘Squeeze array:’, ‘\n’, ‘Shape’, b。shape, ‘\n’, b)# time。sleep(2) ====================================================================# ————————————->> 6、Numpy陣列的索引與切片 <<————————————————-print(“”“ ——————————————>> 6、Numpy陣列的索引與切片 <<—————————————————— 6。1 一維陣列的切片 從一個索引檢索元素到另一個索引 [start:end:step-size] 切片包括開始索引,但不包括結束索引。 如果不指定起始索引或結束索引,則預設值分別為0或陣列大小。預設情況下步長為1。”“”)a = np。array([1, 2, 3, 4, 5, 6, 7, 8, 9])print(a[0:-1:2]) # 不包含最後的元素——————————同樣是:前含後不含print(“”“ ————————————————————————————————————————————- 6。2 二維陣列的切片 要對二維陣列進行切片,需要同時提供行和列的切片:”“”)a = np。array([[1, 2, 3], [4, 5, 6]])# 列印第一行值print(‘First row values :’, ‘\n’, a[0:1, :])# 具有列的步長print(‘Alternate values from first row:’, ‘\n’, a[0:1, ::2])#print(‘Second column values :’, ‘\n’, a[:, 1::2])print(‘Arbitrary values :’, ‘\n’, a[0:1, 1:3])print(“”“ ————————————————————————————————————————————- 6。3 三維陣列的切片 三維陣列還有一個深度軸,在這個深度軸上,它將一個二維陣列放在另一個數組後面。 所以,當你在切片一個三維陣列時,你還需要提到你要切片哪個二維陣列。 這通常作為索引中的 第一個值 出現: 頁——-行——-列”“”)# 展示三維陣列的形狀# img3 = cv2。imread(“E:\\BaiduNetdiskWorkspace\\python\\pycharm2021。2。3-Learn\\Numpy-lib\\img\\3d-np-array。png”, 1)# cv2。imshow(‘image’, img3)# cv2。waitKey(0)# cv2。destroyAllWindows()a = np。array([[[1, 2], [3, 4], [5, 6]], # 第一個軸陣列 [[7, 8], [9, 10], [11, 12]], # 第二個軸陣列 [[13, 14], [15, 16], [17, 18]]]) # 第三個軸陣列# 3-D arrayprint(a)# 3d array 切片print(‘First array, first row, first column value :’, ‘\n’, a[0, 0, 0])print(‘First array last column :’, ‘\n’, a[0, :, 1])print(‘First two rows for second and third arrays :’, ‘\n’, a[1:, 0:2, 0:2])# 果希望將值作為一維陣列,則可以始終使用flatten()方法來完成此項工作!print(‘Printing as a single array :’, ‘\n’, a[1:, 0:2, 0:2]。flatten())print(“”“ ————————————————————————————————————————————- 6。4 Numpy陣列的負切片 負切片從末尾而不是開頭列印元素 https://www。toutiao。com/a6843660611235086851#:~:text=14%2015%2016%5D-,NumPy%E6%95%B0%E7%BB%84%E7%9A%84%E8%B4%9F%E5%88%87%E7%89%87,-%E5%AF%B9%E6%95%B0%E7%BB%84 ”“”)a = np。array([[[1, 2], [3, 4], [5, 6]], # 第一個軸陣列 [[7, 8], [9, 10], [11, 12]], # 第二個軸陣列 [[13, 14], [15, 16], [17, 18]]]) # 第三個軸陣列# 負切片b = np。array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])print(b[:, -1]) # 列印了每行的最後一個值# 如果我們想從末尾提取,我們必須顯式地提供負步長,否則結果將是空列表。print(a[:, -1:-3:-1]) # 顯式地提供負步長# [[ 5 4]# [10 9]] ***不包括最後的索引位置的值——-否則會有3和8折兩個值# 切片的基本邏輯保持不變,即輸出中從不包含結束索引。# ————————————————————-print(“”“ 負切片的一個有趣的用途是反轉原始陣列。 反轉陣列也可以用 flip()方法 反轉ndarray ”“”)a = np。array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])print(‘Original array :’, ‘\n’, a)print(‘Reversed array :’, ‘\n’, a[::-1, ::-1])print(‘Original array :’, ‘\n’, a)print(‘Reversed array vertically np。flip()方法:’, ‘\n’, np。flip(a, axis=1)) # 豎向反轉print(‘Reversed array horizontally np。flip()方法:’, ‘\n’, np。flip(a, axis=0)) # 水平反轉# time。sleep(2) ====================================================================# ————————————->> 7、Numpy陣列的堆疊和級聯 <<————————————————-print(“”“ ——————————————>> 6、Numpy陣列的堆疊和級聯 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=3%20%204%20%205%5D%5D-,%E5%A0%86%E5%8F%A0%E5%92%8C%E7%BA%A7%E8%81%94Numpy%E6%95%B0%E7%BB%84,-%E5%A0%86%E5%8F%A0ndarrays 7。1 堆疊ndarrays————————-利用舊陣列組合生成新陣列 陣列堆疊:透過組合現有陣列來建立新陣列。 通常:透過兩種方式來完成: 使用 vstack()——-增加行 方法垂直組合陣列(即沿行),從而增加結果陣列中的行數 使用 hstack()——-增加列 以水平方式(即沿列)組合陣列,從而增加結果陣列中的列數 按照 索引沿深度軸 堆疊: dstack() 方法。它按索引組合陣列元素,並沿深度軸堆疊 ”“”)# img4 = cv2。imread(# ‘E:\\BaiduNetdiskWorkspace\\python\\pycharm2021。2。3-Learn\\Numpy-lib\\img\\np-dstack。png’, 1)# cv2。imshow(“image”, img4)# cv2。waitKey(0)# cv2。destroyAllWindows()a = np。arange(0, 5)b = np。arange(5, 10)print(‘Array 1 :’, ‘\n’, a)print(‘Array 2 :’, ‘\n’, b)print(‘Vertical stacking :’, ‘\n’, np。vstack((a, b))) # 垂直方向組合陣列(沿行)——-增加行數print(‘Horizontal stacking :’, ‘\n’, np。hstack((a, b))) # 水平方向組合(沿列)——-增加列數# Array 1 :# [0 1 2 3 4]# Array 2 :# [5 6 7 8 9]# Vertical stacking :# [[0 1 2 3 4]# [5 6 7 8 9]]# Horizontal stacking :# [0 1 2 3 4 5 6 7 8 9]# 按照索引堆疊陣列的np。dstack()方法a = [[1, 2], [3, 4]]b = [[5, 6], [7, 8]]c = np。dstack((a, b))print(‘Array 1 :’, ‘\n’, a)print(‘Array 2 :’, ‘\n’, b)print(‘Dstack :’, ‘\n’, c)print(c。shape)# img5 = cv2。imread(“E:\\BaiduNetdiskWorkspace\\python\\pycharm2021。2。3-Learn\\Numpy-lib\img\\np-dstack。png”, 1)# cv2。imshow(“image”, img5)# cv2。waitKey(5)# cv2。destroyAllWindows()print(“”“ ————————————————————————————————————————————- 7。2 Numpy陣列的級聯 使用 concatenate()方法 ,其中傳遞的陣列沿現有軸連線: ”“”)a = np。arange(0, 5)。reshape(1, 5)b = np。arange(5, 10)。reshape(1, 5)print(‘Array 1 :’, ‘\n’, a)print(‘Array 2 :’, ‘\n’, b)print(‘Concatenate along rows :’, ‘\n’, np。concatenate((a, b), axis=0))print(‘Concatenate along columns :’, ‘\n’, np。concatenate((a, b), axis=1))# 始陣列必須具有要合併的軸# 函式是append方法,它將新元素新增到ndarray的末尾# 將值附加到ndarraya = np。array([[1, 2], [3, 4]])np。append(a, [[5, 6]], axis=0)# time。sleep(2) ====================================================================# ————————————->> 8、Numpy陣列的廣播 <<————————————————-print(“”“ ——————————————>> 8、Numpy陣列的廣播(算數運算) <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=4%5D%2C%0A%20%20%20%20%20%20%20%5B5%2C%206%5D%5D)-,Numpy%E6%95%B0%E7%BB%84%E5%B9%BF%E6%92%AD,-%E5%B9%BF%E6%92%AD%E6%98%AFndarrays 廣播是ndarrays最好的功能之一。它允許你在不同大小的ndarray之間或ndarray與簡單數字之間執行算術運算! 廣播基本上延伸較小的ndarray,使其與較大ndarray的形狀相匹配: ”“”)a = np。arange(10, 20, 2)b = np。array([[2], [2]])print(‘Adding two different size arrays :’, ‘\n’, a + b)print(‘Multiplying an ndarray and a number :’, a * 2)“”“它的工作可以看作是——>>拉伸或複製標量,即數字<<——[2,2,2]以匹配ndarray的形狀,然後按元素執行操作。但是實際上並沒有生成該陣列,這只是一種思考廣播如何運作的方式。這非常有用,因為用標量值乘一個數組比用另一個數組更有效!需要注意的是,只有當兩個ndarray相容時,它們才能一起廣播。 Ndarrays在以下情況下相容: 兩者都有相同的尺寸 其中一個ndarrays的維數是1。尺寸為1的廣播會滿足尺寸更大的ndarray的大小要求 如果陣列不相容,你將得到一個ValueError。”“”a = np。ones((3, 3))b = np。array([2]) # 設第二個ndarray被拉伸成3x3形狀,然後計算結果print(a + b)# ——————————————————————————————————————————-# time。sleep(2) ====================================================================# ————————————->> 9、Numpy Ufuncs <<————————————————-print(“”“ ——————————————>> 9、Numpy Ufuncs <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=%E7%84%B6%E5%90%8E%E8%AE%A1%E7%AE%97%E7%BB%93%E6%9E%9C%E3%80%82-,NumPy%20Ufuncs,-Python%E6%98%AF%E4%B8%80%E7%A7%8D Python是一種動態型別語言。 這意味著在賦值時不需要知道變數的資料型別。Python將在執行時自動確定它。雖然這意味著編寫更乾淨、更容易的程式碼,但也會使Python變得遲緩。 當Python必須重複執行許多操作(比如新增兩個陣列)時,這個問題就會顯現出來。這是因為每次需要執行操作時,Python都必須檢查元素的資料型別。使用ufuncs函式的NumPy可以解決這個問題。 NumPy使這個工作更快的方法是使用向量化。向量化在編譯的程式碼中以逐元素的方式對ndarray執行相同的操作。 因此,不需要每次都確定元素的資料型別,從而執行更快的操作。 ufuncs 是NumPy中的通用函式,只是數學函式。它們執行快速的元素功能。 當對NumPy陣列執行簡單的算術操作時,它們會自動呼叫,因為它們充當NumPy ufuncs的包裝器。例如,當使用“+”新增兩個NumPy陣列時,NumPy ufunc add()會在場景後面自動呼叫,並悄悄地發揮其魔力:”“”)# time。sleep(2) ====================================================================# ————————————->> 10、Numpy陣列的基本運算 <<————————————————-print(“”“ ——————————————>> 10、Numpy陣列的基本運算 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=%E6%89%A7%E8%A1%8C%E8%BF%99%E4%BA%9B%E6%93%8D%E4%BD%9C%E3%80%82-,NumPy%E6%95%B0%E7%BB%84%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%BF%90%E7%AE%97,-%E5%9F%BA%E6%9C%AC%E7%9A%84%E7%AE%97%E6%9C%AF 基本的算術運算可以很容易地在NumPy陣列上執行。要記住的重要一點是,這些簡單的算術運算子號只是作為NumPy ufuncs的包裝器。 ”“”)print(“Original :”, “\n”, a)print(‘Subtract :’, ‘\n’, a - 5)print(‘Multiply :’, ‘\n’, a * 5)print(‘Divide :’, ‘\n’, a / 5)print(‘Power :’, ‘\n’, a ** 2)print(‘Remainder :’, ‘\n’, a % 5)# time。sleep(2) ====================================================================# ————————————->> 11、Numpy陣列的平均值、中位數和標準差 <<————————————————-print(“”“ ——————————————>> 11、Numpy陣列的平均值、中位數和標準差 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=3%204%200%5D-,%E5%B9%B3%E5%9D%87%E5%80%BC%E3%80%81%E4%B8%AD%E4%BD%8D%E6%95%B0%E5%92%8C%E6%A0%87%E5%87%86%E5%B7%AE,-%E8%A6%81%E6%9F%A5%E6%89%BENumPy 平均值方法: mean() 中位數方法: median() 標準差方法: std() ”“”)a = np。arange(5, 15, 2)print(‘Mean :’, np。mean(a))print(‘Standard deviation :’, np。std(a))print(‘Median :’, np。median(a))# time。sleep(2) ====================================================================# ————————————->> 12、Numpy陣列的最小值、最大值及其索引 <<————————————————-print(“”“ ——————————————>> 12、Numpy陣列的最小值、最大值及其索引 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=2。8284271247461903%0AMedian%20%3A%209。0-,%E6%9C%80%E5%B0%8F%E6%9C%80%E5%A4%A7%E5%80%BC%E5%8F%8A%E5%85%B6%E7%B4%A2%E5%BC%95,-%E4%BD%BF%E7%94%A8Min()%E5%92%8C 使用 Min()和Max() 方法可以輕鬆找到ndarray中的Min和Max值: 使用 argmin()和argmax() 方法輕鬆確定ndarray中沿特定軸的最小值或最大值的索引: ”“”)a = np。array([[1, 6, 5], [4, 3, 7]])print(‘Min :’, np。min(a, axis=0)) # 最小值 返回列表print(‘Max :’, np。max(a, axis=1)) # 最大值 返回列表print(‘Min :’, np。argmin(a, axis=0)) # 最小值索引print(‘Max :’, np。argmax(a, axis=1)) # 最大值索引# time。sleep(2) ====================================================================# ————————————->> 13、Numpy陣列排序 <<————————————————-print(“”“ ——————————————>> 13、Numpy陣列排序 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=%E8%BE%93%E5%87%BA%E6%8C%87%E7%A4%BA%E4%BB%80%E4%B9%88%E3%80%82-,%E5%9C%A8NumPy%E6%95%B0%E7%BB%84%E4%B8%AD%E6%8E%92%E5%BA%8F,-%E5%AF%B9%E4%BA%8E%E4%BB%BB%E4%BD%95%E7%A8%8B%E5%BA%8F Numpy庫有一系列排序函式,可用於對陣列元素進行排序。 sort() 方法實現快速排序、堆排序、合併排序和時間排序 ”“”)a = np。array([1, 4, 2, 5, 3, 6, 8, 7, 9])print( np。sort(a, kind=‘quicksort’) # 快速排序)a = np。array([[5, 6, 7, 4], [9, 2, 3, 7]])print( ‘Sort along column :’, ‘\n’, np。sort(a, kind=‘mergresort’, axis=1) # 沿列排序)print( ‘Sort along row :’, ‘\n’, np。sort(a, kind=‘mergresort’, axis=0) # 沿行排序)# time。sleep(2) ====================================================================# ————————————->> 14、Numpy陣列和影象 <<————————————————-print(“”“ ——————————————>> 14、Numpy陣列和影象 <<—————————————————— https://www。toutiao。com/a6843660611235086851#:~:text=6%207%207%5D%5D-,NumPy%E6%95%B0%E7%BB%84%E5%92%8C%E5%9B%BE%E5%83%8F,-NumPy%E6%95%B0%E7%BB%84 影象資料是什麼? 黑白影象由以陣列形式儲存的畫素組成。每個畫素的值介於0到255之間–0表示黑色畫素,255表示白色畫素。 彩色影象由三個二維陣列組成,每個彩色通道一個:紅色、綠色和藍色,背靠背放置,從而形成三維陣列。 陣列中的每個值構成一個畫素值。因此,陣列的大小取決於每個維度上的畫素數。 ”“”)# Python可以使用imageio。imread()方法。當我們輸出它時,它只是一個包含畫素值的三維陣列:img6 = imageio。imread(‘E:\\BaiduNetdiskWorkspace\\python\\pycharm2021。2。3-Learn\\Numpy-lib\\img\\car。jpg’)print(img6)print(img6。shape)print(type(img6))cv2。imshow(“image”, img6)cv2。waitKey(0)cv2。destroyAllWindows()# 由於影象只是一個數組,我們可以使用本文中介紹的陣列函式輕鬆地對其進行操作。# 比如,我們可以使用np。flip()方法:cv2。imshow(“image”, (np。flip(img6, axis=1))) # 影象翻轉cv2。waitKey(0)cv2。destroyAllWindows()print(img6/255)# NumPy函式 官方文件:文件連結:https://numpy。org/doc/# 參考:NumPy簡潔教程 https://www。toutiao。com/a6843660611235086851