2013-12-10 72 views
5

R中,如果我們有一個向量和一個索引列表,我們可以使用負索引來表達我們想要「除這些索引以外的所有元素」的想法。特別是,考慮以下R代碼:在Matlab中是否有等價於R的負指數?

data = rnorm(100) 
indices = sample(1:length(data), length(data)/2) 
training_data = data[indices] 
test_data = data[-indices] 

此代碼後,sampled_data包含所有data,其指數是不包括在indices的元素。 在matlab中是否有與此相當的內容?

我試圖直接使用相同的語法(當然wtih ()代替[]的,但它只是給了錯誤

Subscript indices must either be real positive integers or logicals. 

回答

8

Matlab的不允許負指數。你能做些什麼來移除元素是這個:

data2 = data; 
data2(indices) = []; % remove selected elements 

但是這樣的機器學習的東西時,我更喜歡用邏輯索引:

istest = randn(length(data), 1) < 0; % random logicals: 50% 0's and 50% 1's 
istrain = ~istest; 
% Now operate on data(istest) and data(istrain). 
1

我最終將索引數組轉換爲邏輯(而不是直接生成邏輯數組),因爲我仍然希望將原始索引用於其他目的。

indices = datasample(1:length(data), length(data)/2); 
logical = false(length(data) ,1); 
logical(indices) = true; 
training_data = data(logical) 
test_data = data(~logical) 

這種生成邏輯數組的方式可以更容易地控制培訓與測試示例的比例,至少對我而言。

但是,我仍然覺得jez的解決方案非常具有教育意義。

相關問題