如何比较matlab中的两个单元格元素?

时间:2014-04-12 16:20:05

标签: matlab cell

我使用两个单元格来存储matlab中神经网络过程的目标值和期望值。我使用了两个1 * 1单元阵列来分别存储值。这是我的代码。

cinfo=cell(1,2)
cinfo(1,1)=iter(1,10)%value is retrieved from a dataset iter
cinfo(1,2)=iter(1,11)
amp1=cinfo(1,1);
amp2=cinfo(1,2);
if amp1 == amp2
       message=sprintf('NOT DETECTED BY THE  DISEASE');
       uiwait(msgbox(message));

但是当我运行上面的代码时,会收到以下错误:

??? Undefined function or method 'eq' for input arguments of type 'cell'.
Error in ==> comparison at line 38
if amp1 == amp2

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

问题在于你如何编制索引。 1x1单元格数组没有多大意义,而是通过使用大括号进行索引来获取单个单元格中的实际元素:

amp1=cinfo{1,1}; # get the actual element from the cell array, and not just a
amp2=cinfo{1,2}; # 1x1 cell array by indexing with {}
if (amp1 == amp2)
  ## etc...

但请注意,如果amp1amp2不是标量,则上述行为会很奇怪。相反,做

if (all (amp1 == amp2))
  ## etc...

答案 1 :(得分:0)

使用isequal。即使单元格的内容具有不同的大小,这也会有效。

示例:

cinfo=cell(1,2);
cinfo(1,1) = {1:10}; %// store vector of 10 numbers in cell 1
cinfo(1,2) = {1:20}; %// store vector of 20 numbers in cell 2
amp1 = cinfo(1,1); %// single cell containing a length-10 numeric vector
amp2 = cinfo(1,2); %// single cell containing a length-20 numeric vector
if isequal(amp1,amp2)
    %// ...

在这个与您的代码平行的示例中,amp1amp2是由包含数字向量的单个单元格组成的单元格数组。另一种可能性是将每个单元格的内容直接存储到amp1amp2,然后进行比较:

amp1 = cinfo{1,1}; %// length-10 numeric vector
amp2 = cinfo{1,2}; %// length-20 numeric vector
if isequal(amp1,amp2)
    %// ...

请注意,即使在这种情况下,比较amp1==amp1all(amp1==amp2)也会产生错误,因为矢量的大小不同。