我正在尝试编写一个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
答案 0 :(得分:0)
如果您按照指定的方式创建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)
,选择1
向量中设置为testIdx
的所有索引,然后将pred
写入这些索引。