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

Matlab 在循环中使用find()并使用结果创建矩阵,matlab,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)) e

我希望使用
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   

你的问题不太清楚,但我想你已经试过了

matchIdx(:,i) = find(match(:,i));
这是行不通的,因为
find(match(:,1))
find(match(:,2))
不能保证长度相同

使用细胞阵列对你有用吗

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

您可以使用简单相等代替ISMEMBER。一行:

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

是的,我试过这个。但是,我不确定如何在地址中使用这些结果。不过我才发现!X=data(matchIdx{2})我想避免使用关联数组,因为我还是有点不懂。。谢谢你的帮助!那是一个细胞阵列。关联数组在MatLab中被称为
struct
,使用语法
matchIdx.(键)
IIRC.@user1429344好的,很高兴听到你能工作。如果答案有帮助,请随意接受(单击旁边的复选标记)。欢迎来到StackOverflow!