2013-12-10 44 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的解决方案非常具有教育意义。

相关问题