MatLab - Cellfun其中func = strcmp查找str在单元格数组中的变化

时间:2015-06-06 21:04:06

标签: matlab cell-array strcmp

我有一个字符串的单元格数组,我想检测字符串更改的次数并获取更改的indxs。鉴于Matlab的cellfun函数,我试图使用它而不是循环。这是所有代码。我感谢您的时间,反馈和意见。

% Cell Array Example
names(1:10)={'OFF'};
names(11:15)={'J1 - 1'};
names(16:22)={'J1 - 2'};
names(23:27)={'J2 - 1'};
names(28)={'Off'};
names=names';

% My cellfun code
cellfun(@(x,y) strcmp(x,y), names(1:2:end),names(2:2:end));

我的预期结果是长度为27(长度(名称)-1)的向量,其中向量中有4个零,表示strcmp func找到4个比较不相等的情况。

实际结果是长度为14的向量,只有2个零。我真的很感激解释,为什么会出现意想不到的结果。

谢谢

3 个答案:

答案 0 :(得分:3)

Matt提供的answer正确显示了您的代码的问题。但是,您可以直接使用strcmp,因为它接受两个字符串数组作为输入

>> strcmp(names(1:end-1), names(2:end))
ans =
  Columns 1 through 14
     1     1     1     1     1     1     1     1     1     0     1     1     1     1
  Columns 15 through 27
     0     1     1     1     1     1     1     0     1     1     1     1     0

答案 1 :(得分:2)

您可以使用unique将字符串转换为数字标签,然后应用diff来检测更改:

[~, ~, u] = unique(names);
result = ~diff(u);

答案 2 :(得分:0)

如果我理解您的问题,您应该将names(1:end-1)names(2:end)进行比较。也就是说,将字符串1与字符串2进行比较,将字符串2与字符串3进行比较,依此类推。您使用的是步幅2,将字符串1与字符串2进行比较,将字符串3与字符串4进行比较,依此类推。您可以通过将最后一行更改为:

来解决此问题
cellfun(@(x,y) strcmp(x,y), names(1:end-1),names(2:end))

结果是:

 Columns 1 through 20:

 1   1   1   1   1   1   1   1   1   0   1   1   1   1   0   1   1   1   1   1

 Columns 21 through 27:

 1   0   1   1   1   1   0