1. 程式人生 > >python 從陣列中隨機選擇一部分取出,並從原陣列中刪除取出的內容

python 從陣列中隨機選擇一部分取出,並從原陣列中刪除取出的內容

可以使用numpy中的random.choice函式隨機選擇陣列的下標

numpy.random.choice(a, size=None, replace=True, p=None)
#a為一維陣列或int值,為一維陣列時會從該陣列中隨機選擇元素,為int值時會先生成一個np.arange(a)的陣列,然後從中隨機選擇元素
#sizeint值,為選擇元素的個數
#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])