在MATLAB中查找单元格数组中的子字符串

4
我想在我的单元格中找到名称中含有“HA”部分的数组。我在这里找到了一个函数,但它不能解决我的问题。 我的单元格如下:
'HA1'   'HA1'   'HA1'   'HA1'   'HA1'
'HA2'   'HA2'   'HA2'   'HA2'   'HA2'
'HA3'   'HA3'   'HA3'   'HA3'   'HA3'
'HA4'   'HA4'   'HA4'   'HA4'   'HA4'
'HA5'   'HA5'   'HA5'   'HA5'   'HA5'
'HA6'   'HA6'   'HA6'   'HA6'   'HA6'
'HA7'   'HA7'   'HA7'   'HA7'   'HA7'
'HA8'   'WA1'   'WA1'   'WA1'   'WA1'
'HA9'   'WA2'   'WA2'   'WA2'   'WA2'
'HA10'  'WA3'   'WA3'   'WA3'   'WA3'
'HA11'  'WA4'   'WA4'   'WA4'   'WA4'
'DA1'   'WA5'   'WA5'   'WA5'   'WA5'
'DA2'   []  []  []  'WA6'
'DA3'   []  []  []  'WA7'
'DA4'   []  []  []  'WA8'
'DA5'   []  []  []  'WA9'
'DA6'   []  []  []  'WA10'
[]  []  []  []  'WA11'
[]  []  []  []  'WA12'

我尝试了这个函数:
x = 'HA';
y = cellArray;
substrfind = @(x,y) ~cellfun(@isempty,strfind(y,x));
logicalArray = substrfind(x,y);

我应该得到一个逻辑数组作为输出,这对我的问题非常有用。但是我却遇到了以下错误消息:"如果任何输入参数都是单元格数组,则第一个参数必须是字符串单元格数组,第二个参数必须是字符数组。"

我不理解错误在哪里,因为第一个输入y是单元格数组,而第二个x是字符。

希望你们能帮助我解决这个问题!

提前感谢您的帮助!

最好的问候

1个回答

8
假设 C 是您的单元数组,那么实现您想要的方式是这样的:
>> C(cellfun('isempty', C)) = {''};
>> logicalArray = ~cellfun('isempty', strfind(C, 'HA'))

strfind 不接受包含非字符串值的单元数组。你的单元数组恰巧有一些空值,但是这些空值是 错误类型 -- []double 类型,而不是 char 类型。这就是你出现该错误的原因。

因此,我只需将每个空的 double 替换为空字符 (''),然后使用 strfind

解决此问题的另一种方法:

>> logicalArray = cellfun(@(x)~isempty(strfind(x,'HA')), C)

但那会慢很多。

谢谢!这帮了我很多!我没有检查空值。下次我不会忘记! - cacá

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接