如何在matlab中将数组的一部分存储到另一个数组?

时间:2015-02-01 15:38:00

标签: arrays matlab

我正在尝试编写一个svm代码,但我确实是matlab中的初学者。

所以在我的代码中,在for循环中,我应该存储预测。数据是这样的:

testIdx =  [1 1 1 0 0 0 0 0 1 0 1 1]';  % i wrote it like this but it says logical

pred = [1 1 1 0 1 0]'; % again logical

所以我想形成一个12长度的数组并将其第1,第2,第3,第9,第11,第12个元素转换为1 1 1 0 1 0,并且在其他迭代中将其余的测试元素转换为另一组0/1 。

如果可能的话,让它成为普通数组,而不是逻辑数组。提前致谢

我自己做了旧式但是必须有一个更短的直接方式吗?

Y = zeros ( size(testIdx,1), 1) ;
a=1;

for i = 1:size(testIdx,1)
    if testIdx(i) ==1
        Y(i) = pred(a);
        a=a+1;
    end
end

1 个答案:

答案 0 :(得分:0)

如果您按照指定的方式创建testIdxpred,那么它们是double而不是logical类型。要使用逻辑索引,最简单的方法是testIdx转换为logical类型。然后你可以简单地使用

testIdx =  [1 1 1 0 0 0 0 0 1 0 1 1]';
pred = [1 1 1 0 1 0]';

Y = zeros(size(testIdx));
Y(logical(testIdx)) = pred;

使用Y(logical(testIdx),选择1向量中设置为testIdx的所有索引,然后将pred写入这些索引。