在R
中,如果我们有一个向量和一个索引列表,我们可以使用负索引来表达我们想要"除了这些索引之外的所有元素"的想法。特别是,考虑以下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中有类似的东西吗
我尝试直接使用相同的语法(当然是()
而不是[]
,但它只是给出了错误
Subscript indices must either be real positive integers or logicals.
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).
我最终将索引数组转换为逻辑数组(而不是直接生成逻辑数组),因为我仍然希望原始索引用于其他目的。
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的解决方案很有教育意义。