繁体   English   中英

如何在单元格数组中找到匹配特定模式的特定数组?

[英]How to find a particular array matching certain pattern in cell array?

我想知道特定列中包含特定数组的单元格行的索引...

例:

C{1,1} = [1 2 3];
C{1,2} = [4 5 6];
C{2,1} = [11 12 13];
C{2,2} = [14 15 16];

我想获得索引作为1时我搜索[1 2 3]在第1列(或)2,当我在第2栏搜索[14 15 16]。 我试过用

index = find([C{:,1}] == [1 2 3])

但没有得到。 请帮忙

cellfunstrfindisempty组合使用或直接使用isequal

pattern = [1 2 3];

out = cellfun(@(x) ~isempty(strfind(x,pattern)),C)
%// or as suggested by Luis Mendo
out = cellfun(@(x) isequal(x,pattern),C)

ind = find(out)

如果阵列中的顺序并不重要,也以下使用ismemberall可能:

out = cellfun(@(x) all(ismember(x,pattern)),C)

out =
     1     0
     0     0

ind =
     1

是否所有的阵列具有相同的长度n 然后,您可以使用带有可选if条件的更多矢量化方法来查看结果是否有效。 根据您对模式输入的确定程度,可能没有必要。

n = 3;
pos = strfind([C{:}],pattern)
ind = [];
if mod(pos,n) == 1, ind = (pos - 1)/n + 1, end

两种变体都为您提供线性指数 ,对于pattern = [14 15 16]; 它将返回4 要获取行索引,您需要一个额外的步骤:

[~,row_ind] = ind2sub(size(C),ind)

另一种方法使用pdist2代替ismemberall从对方的回答

pattern = [1 2 3];
out = cellfun(@(x) pdist2(x,pattern)==0,C);
ind = find(out)

给出与其他答案相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM