[英]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])
但没有得到。 请帮忙
将cellfun
与strfind
和isempty
组合使用或直接使用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)
如果阵列中的顺序并不重要,也以下使用ismember
和all
可能:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.