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!