我有一个字符串的单元格数组,我想检测字符串更改的次数并获取更改的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个零。我真的很感激解释,为什么会出现意想不到的结果。
谢谢
答案 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)
答案 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