2014-11-23 218 views
1

我有一個多維的ndarray,我期待隨機選擇1000個替換陣列。這在我看來很簡單,但我正在努力融入更換部件。從多維numpy陣列中選擇隨機陣列替換

在這個ndarray中有3065個陣列。

np.shape(train_spam) 
(3065L, 58L) 

我試圖用np.random.shuffle(),但是這並沒有考慮到與更換帳戶。

np.random.shuffle(train_spam) 
X_train = train_spam[:1000,1:57] 

我的最終輸出將具有(1000L,58L)的形狀。

我想我可以運行具有ndarray循環與

X_train = train_spam[0:57] 

然後追加,但我無法弄清楚如何正確添加,所以它看起來是一樣的。任何幫助將不勝感激

+0

是針對NumPy的這個問題呢?如果你所需要的只是一種選擇隨機數組的替代方法,我建議'selection = [arrays [random.randrange(n)] [:] in range in(k)]''其中'n'是'array'和'k'是你想要用替換選擇的元素的數量。 – 2014-11-23 21:53:34

+0

如果這符合您的需求,請讓我知道,我會發布正式答案。 – 2014-11-23 21:54:21

+0

實際上並沒有爲我工作,我試圖在numpy上變得更好,回答你的問題 – itjcms18 2014-11-23 22:00:19

回答

3

你可以使用

selected = train_spam[np.random.randint(train_spam.shape[0], size=1000)] 
+0

儘管'0'參數是不必要的。 'np.random.randint(train_spam.shape [0],size = 1000)'會做同樣的事情。 – ryanpattison 2014-11-23 22:24:18

+0

@rpattiso:謝謝,我的答案已更新。 – 2014-11-23 22:27:09

0

您也可以建立索引列表與[random.randrange(n) for i in range(k)]

k = 1000           # Number of elements to select. 
n = train_spam.shape[0]       # Number of elements in array. 
indices = [random.randrange(n) for i in range(k)] # A plain Python list. 
selected = train_spam[np.array(indices)]   # Convert indices to ndarray. 

如果你從你要選擇與更換元素的純Python列表,你可以這樣做:

pets = ['ant', 'bear', 'cat', 'dog', 'elephant', 'flamingo', 'gorilla', 'horse'] 
n = len(pets) 
k = 10 
selected = [pets[random.randrange(n)] for i in range(k)]