在循环中使用find()并使用结果创建矩阵

时间:2012-05-31 20:24:28

标签: matlab

我希望将matchIdx生成的结果保存到单独的向量矩阵中。然后,此Idx可用作进一步操作中的地址。

问题是当我尝试分配到matchIdx(:,i)时,由于列的大小不匹配而导致错误。

我希望有人可以提供帮助。谢谢。

data = [1;2;3;3;5;6;6;3;8;8;9;5;6;7;8;9;10];
check = [2;3;5];

for i=1:3
  match(:,i) = ismember(data,check(i));
  matchIdx = find(match(:,i))
end   

2 个答案:

答案 0 :(得分:2)

你的问题并不完全清楚,但我认为你试过了

matchIdx(:,i) = find(match(:,i));

这不起作用,因为find(match(:,1))find(match(:,2))不能保证长度相同。

使用单元格数组会为你工作吗?

matchIdx{i} = find(match(:,i));

答案 1 :(得分:0)

您可以使用简单的相等而不是ISMEMBER。在一行中:

>> matchIdx = arrayfun(@(x) find(data==x), check, 'Uniform',false)
matchIdx = 
    [         2]
    [3x1 double]
    [2x1 double]