一、numpy切片基礎知識
import numpy as np
# 創建一個5x5的隨機矩陣
arr = np.random.randint(0, 10, size=(5,5))
print(arr)
# 選取第2行,第3列的元素
print(arr[1,2])
# 選取第一行的所有元素
print(arr[0,:])
# 選取第二列的所有元素
print(arr[:,1])
# 選取左上角的2x2區域
print(arr[:2,:2])
numpy切片是非常高效且可靠的,用於訪問多維numpy數組中的子數組。在numpy中,切片使用“:”進行索引,通過指定起始和結束索引,我們可以輕鬆地從數組中選取需要的元素 。需要注意的是,numpy中的切片是對原始數組的視圖而不是複製,所以對選取到的切片進行更改將會影響原數組。
二、numpy切片進階應用
numpy切片可以很容易地處理並操作數組中的子數組。下面我們講解幾個切片進階應用的例子:
1. 條件切片
import numpy as np
# 創建一個5x5的隨機矩陣
arr = np.random.randint(0, 10, size=(5,5))
print(arr)
# 選取所有大於等於5的元素
print(arr[arr >= 5])
# 將大於等於5的元素替換為0
arr[arr >= 5] = 0
print(arr)
條件切片是通過一個布爾數組來實現的。該數組與原數組尺寸相同,其中的每個值對應原數組中相應位置上的值是否滿足條件。因此,我們可以使用條件切片選取所有滿足特定條件的元素,並通過條件切片將這些元素進行操作。
2. 多軸切片
import numpy as np
# 創建一個3維數組
arr = np.random.randint(0, 10, size=(3,4,5))
print(arr)
# 選取第1個軸的第2~3元素,第2個軸的第2~3元素,第3個軸的第3~4元素
print(arr[1:3,1:3,2:4])
# 將第2~3元素替換為0
arr[1:3,1:3,2:4] = 0
print(arr)
在numpy數組中,我們可以通過指定多個軸來進行切片。比如上面的例子,通過指定第1,第2,和第3個軸,我們可以選取指定範圍內的多維區域,並進行更改。這個進階應用在數據分析領域非常常見。
三、numpy切片應用場景
numpy切片支持高效地針對多維數組進行局部訪問,非常適合在數據科學中處理大量數據。以下是一些numpy切片經常應用的場景:
1. 數據清理
對於數據清理領域,numpy切片可用於選取需要操作的行和列。
import numpy as np
# 導入csv數據
data = np.loadtxt('data.csv', delimiter=',', skiprows=1)
# 選取所有樣本的第2和第4列
x = data[:,(1,3)]
# 選取所有樣本的第1,第3和第5列
y = data[:,(0,2,4)]
2. 圖像處理
圖像處理領域,numpy切片非常高效,能夠從圖像矩陣中選取任何感興趣區域(ROI)。圖像處理是numpy應用的重要領域之一。我們可以使用numpy的函數讀取和操作圖像,這裡我們使用opencv庫展示一個簡單的例子:
import numpy as np
import cv2
# 讀取圖像
img = cv2.imread('img.jpg')
# 獲取圖像ROI
roi = img[120:220,150:250]
# 將ROI替換成灰度圖像
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
img[120:220,150:250] = cv2.cvtColor(gray_roi, cv2.COLOR_GRAY2BGR)
# 顯示圖像
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 數組操作
在數據分析領域,numpy數組在多個數據處理任務中均有應用。多數情況下,我們需要查找、處理並操作數組中的特定子數組。numpy切片可以高效地針對這些子數組進行操作。比如,我們可以容易地查找、過濾並轉換numpy數組。
import numpy as np
# 創建一個4x4的有序矩陣
arr = np.arange(1,17).reshape(4,4)
print(arr)
# 選取所有奇數並將它們替換為0
arr[arr%2==1] = 0
print(arr)
# 選取所有數據並乘以2
arr *= 2
print(arr)
在numpy切片中使用條件切片和高效多軸切片技巧非常方便,我們可以決定選取或者操作的子數組的大小和形狀。此外,numpy切片也非常適合於任何基於數組的數據結構,如圖片、視頻、聲音、以及其他任何複雜的實時或後期處理的數據。
原創文章,作者:GTRM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147210.html