我正在尝试编写 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
写入这些索引。