【问题标题】:Compare two cell array elements in matlab在matlab中比较两个单元格数组元素
【发布时间】:2012-11-20 07:52:32
【问题描述】:

我正在尝试比较两个单元阵列,1x160 (a) 和 80x1(b)。我的单元格数组由内部有许多字符串的单元格组成。我想比较每个字符串,看看它们是否相等,如果它们相等,则插入新数组,否则插入 0。我找不到任何功能。我尝试了“等量”、“strfind”等。他们都给我下一条错误消息:

如果任何输入参数是元胞数组,则第一个参数必须是 字符串元胞数组,第二个必须是字符数组。

这是我的代码!

function [inter]=Intersect2(a,b)
int=cell(0);
b2=[b;b];

for i=1:length(a)   
    if a{i,1}==b2{i,1}(1) ( or 'isequal','strfind')
       int{i}=a{i};
    else
        int{i}=0;
    end     
end

【问题讨论】:

  • 澄清一下,您不是要查找两个元胞数组的 intersection,而是要跨公共索引进行匹配。对吗?

标签: matlab cell-array


【解决方案1】:

比较字符数组的方法有很多种,strcmp就是其中一种。

我们也将使用cellfun 来避免循环。

a = {'Dude', 'I', 'am', 'a', 'moose'};
b = {'Well', 'I', 'am', 'a', 'mouse'};

index = cellfun(@strcmp, a, b);

这会将a 的每个元素与b 中的相应元素进行比较,返回一个逻辑数组index,当元素匹配时返回1,当元素不匹配时返回0

使用它来分配匹配值:

int = cell(1, length(a));
int(index) = a(index);

int =

[] '我' '我' 'a' []

如果你愿意,你可以扩展这个概念来找到集合的交点。

【讨论】:

  • 优秀的字符串选择。
  • 这是个好办法,但是如果我的数组大小不同怎么办?
  • 视情况而定。如果您要匹配索引到索引,则必须截断一个或填充另一个 - 额外的数据无论如何都是没有意义的。如果你想匹配其他方式,比如交叉路口,你可以使用strcmp,但你肯定需要新代码。
  • 如果顺序很重要,额外的数据可能不是没有意义的,例如 {'a','b','c','d'} 和 {'c','a', 'd'}。有没有比较不同长度的单元格?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
相关资源
最近更新 更多