python 從陣列中隨機選擇一部分取出,並從原陣列中刪除取出的內容
阿新 • • 發佈:2018-12-10
可以使用numpy中的random.choice函式隨機選擇陣列的下標
numpy.random.choice(a, size=None, replace=True, p=None)
#a為一維陣列或int值,為一維陣列時會從該陣列中隨機選擇元素,為int值時會先生成一個np.arange(a)的陣列,然後從中隨機選擇元素
#size為int值,為選擇元素的個數
#replace預設為True,意思是隨機選擇出的元素還會放回樣本集中,即生成的數列中可能存在相同的元素,為False時就不會出現
#p為樣本選擇的概率,預設為一致分佈
import numpy as np
data=np.random.random(size =10)
data
Out[4]:
array([ 0.21575642, 0.30620622, 0.01454852, 0.46253994, 0.11222712,
0.32893411, 0.11040516, 0.51010326, 0.83162364, 0.84285834])
index_1=np.random.choice(data.shape[0],4,replace=False)
index_1
Out[6]: array([1, 4, 2, 3])
data1=data[index_1]
data1
Out[8]: array([ 0.30620622, 0.11222712, 0.01454852 , 0.46253994])
然後我們如何獲得剩下的陣列中的內容呢,我們可以先生成原陣列所有的下標,然後用np.delete函式刪除之前隨機生成的下標陣列
numpy.delete(arr,obj,axis=None)
#arr:輸入向量
#obj:表明哪一個子向量應該被移除。可以為整數或一個int型的向量
#axis:表明刪除哪個軸的子向量,若預設,則返回一個被拉平的向量
index_2=np.arange(data.shape[0])
index_2
Out[10]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
index_2=np.delete (index_2,index_1)
index_2
Out[12]: array([0, 5, 6, 7, 8, 9])
data2=data[index_2]
data2
Out[14]:
array([ 0.21575642, 0.32893411, 0.11040516, 0.51010326, 0.83162364,
0.84285834])