一、入門級別——np.split的基本用法
np.split是Python中numpy模塊提供的一個函數,可以按照指定的軸將一個數組分割成多個子數組。它的基本用法是:
import numpy as np arr = np.arange(9) np.split(arr, 3)
這段代碼可以將長度為9的一維數組分割成3個長度為3的子數組。
np.split的第一個參數是要分割的數組,第二個參數是分割的數量,如果不均分則會報錯。如果要按照指定位置分割,則可以使用列表的方式傳入第二個參數:
np.split(arr, [2, 6])
這裡將會按照位置2和位置6進行分割。
需要注意的是,np.split默認是按照第0軸(行)分割數組,如果要按照列進行分割則需要設置axis參數為1:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) np.split(arr, 3, axis=1)
這裡將會按照列將二維數組分成3個子數組。
二、進階級別——np.split的高級用法
np.split還支持按照指定長度進行分割:
np.split(arr, [2, 4, 7, 9], axis=0)
這裡將會按照長度為2、2、3、2的方式將數組分割成4個子數組。
如果想要按照相等的長度進行拆分,則可以使用np.array_split函數:
np.array_split(arr, 3, axis=0)
這裡將會按照相等的長度將數組分成3個子數組,如果分割的長度不匹配則最後一個子數組的長度不同。
三、應用舉例——數據分桶
np.split在數據處理中可以發揮很大作用,例如將一組數據分成多個桶:
score = np.array([67, 75, 92, 84, 89, 76, 88, 79, 67, 95, 86, 75, 89, 76, 92, 84, 79, 87]) np.split(score, [60, 70, 80, 90, 100])
這裡將會把成績分成[60, 70)、[70, 80)、[80, 90)、[90, 100)、[100, …)五個區間。
在實際應用中可以將區間作為標籤,使用np.digitize將數據分桶:
bins = [60, 70, 80, 90, 100] labels = ['D', 'C', 'B', 'A'] np.digitize(score, bins=bins, right=False).astype(str) + labels
這裡將會把70~79分的學生標記為’C’,80~89分的學生標記為’B’,90~99分的學生標記為’A’。
四、錯誤用法——注意參數的維度
需要注意的是,np.split的參數必須滿足一定的維度要求,否則會報錯。例如以下代碼:
a = np.array([1, 2, 3]) np.split(a, 3, axis=1)
這裡的a是一個一維數組,無法按照第1軸進行分割,因此會報錯。
此外如果要在多維數組中按照指定長度進行分割,則需要保證分割的長度是合法的,否則會報錯:
a = np.array([[1, 2], [3, 4]]) np.split(a, 3, axis=1)
這裡將會報錯,因為a的第1軸長度為2,無法分割成3個子數組。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270087.html