如何将数组的一部分存储到 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

如果创建testIdx并按照指定的方式pred,则它们是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) 时,可以选择在testIdx向量中设置为1的所有索引,然后将pred写入这些索引。

最新更新