【问题标题】:Why is Matlab is not reading an empty cell while running an if statement?为什么 Matlab 在运行 if 语句时不读取空单元格?
【发布时间】:2013-07-10 20:10:14
【问题描述】:

我正在使用下面的循环来隔离记录数据的实例与没有数据的实例。数据集非常大(从 1000 到 6000 不等,具体取决于列)和混合数据类型,所以我能想到的唯一实用的解决方案是使用循环。

我无法让 if 或 while 语句准确读取空格。如果我使用 for 循环,它运行没有任何错误,但它永远不会进入我最终复制的 if 含义的前半部分,而不是分隔我的数据。不同大小的数据使得 for 循环不可取。

while (isempty(andover_all{j,1})==1) 
  if andover_all{h,33}==''; 
      current_data{k,4}= formated_date{j};  
      k=k+1;
  else
    current_data{i,1}=formated_date{j};
    current_data{i,2}=andover_data{33}(j);
    i=i+1;
 end
 h=h+1;
end

Andover_all 是一个字符串数组,current_data 和 andover_data 是具有混合数据类型的元胞数组。我尝试过使用 isempty、[]、cellfun(@isempty,andover_data) 和一个允许我比较单元格元素的函数 eq.m——它们都不起作用。我也不想从数据中删除空单元格,只是跳过它们。

如果您有任何想法,请告诉我

【问题讨论】:

    标签: string matlab is-empty equivalence


    【解决方案1】:

    空瓶确实是一种习惯。这就像与infNaN 一起工作; NaN==NaN1/0==inf 之类的东西应该返回什么?这些人有特殊的规定。简单的,但你必须了解它们。为了让这些人的所有特殊规则更轻松、更直观、更易读,MATLAB 为他们提供了特殊功能:isinf(检测 inf)、isnan(检测 NaN)和 isfinite (检测任一 infNaN)。

    空瓶也有特殊的行为和特殊的规则,需要一些习惯。如果你仔细想想,这一切都说得通:[]==[] 应该返回什么?或1==''

    当然是空的。即使[]==false 为空,[] 在由if 评估时也是false。容易吧? :)

    不幸的是,没有等效的 isinfisnan 来检测特定类型的空(有 no isemptycellisemptychar 等)有 相当于 isfinite 用于空(即 isempty),它捕获 ''{}[]

    但有时需要检查特定空,就像你的情况一样。空容器保留它们的。这意味着,{} 真的是一个单元格,[] 真的是一个 doubles 的数组。

    因此,要检测空单元格:

    >> a = {};
    >> iscell(a) && isempty(a)
    ans = 
        1
    

    检测空字符串:

    >> a = '';
    >> ischar(a) && isempty(a)
    ans = 
        1
    

    并检测空数组:

    >> a = [];
    >> isnumeric(a) && isempty(a)
    ans = 
        1
    

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多