我想知道特定列中包含特定数组的单元格行的索引...
示例:
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列(或) 2 中搜索[1 2 3]
时,我希望将索引设为 1 ,当我搜索[14 15 16]时列 2 。我尝试使用
index = find([C{:,1}] == [1 2 3])
但没有得到。请帮忙
答案 0 :(得分:2)
直接与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)
答案 1 :(得分:0)
另一种方法使用pdist2
代替ismember
和all
来自其他答案
pattern = [1 2 3];
out = cellfun(@(x) pdist2(x,pattern)==0,C);
ind = find(out)
给出与the other answer相同的结果。