【问题标题】:Convert matrix to cell and replace NaN with '-'将矩阵转换为单元格并将 NaN 替换为 '-'
【发布时间】:2020-06-05 19:33:22
【问题描述】:

我有一个矩阵A

A = [nan nan 1 0 nan]

如何将矩阵A 转换为单元格,并将nan 替换为'-',因此新的B 单元格数组将如下所示:

B = {'-' '-' 1 0 '-'}

我试过了

A = mat2cell(A);

A = num2str(A);

然后

A(cellfun(@isNaN,A,'uniformoutput',false)) = {'-'};

这不起作用。

【问题讨论】:

    标签: matlab matrix nan cell-array


    【解决方案1】:

    您可以将您的两次尝试配对,注意您确实想要cellfun 中的'UniformOutput',因为您需要一个逻辑数组。

    A = num2cell(A);
    A(cellfun(@isnan,A)) = {'-'};
    

    或者你可以只使用一个循环...

    B = cell( size( A ) );
    idx = isnan( A );
    for ii = 1:numel(A)
        if idx(ii)
            B{ii} = '-';
        else
            B{ii} = A(ii);
        end
    end
    

    这可能看起来很迟钝,但是如果您正在为mat2cell/cellfun/etc 的正确实现而苦苦挣扎,那么您可以保证用这些函数编写的代码将更难为您自己和他人维护!至少循环是明确的,而且这些天不一定很慢(尽管如果你将数字数据存储在混合类型的单元格数组中,那么我不得不假设性能并不是最重要的)。

    【讨论】:

      【解决方案2】:

      您使用mat2cell 的想法很好,也许用法不清楚!?您也可以使用num2cell,这似乎更容易使用。此外,indexing with logical values 也适用于元胞数组,这可能比cellfun 和类似的更有效:

      A = [nan nan 1 0 nan]
      
      B = num2cell(A);
      B(isnan(A)) = {'-'}
      

      输出:

      A =
         NaN   NaN     1     0   NaN
      
      B =
      {
        [1,1] = -
        [1,2] = -
        [1,3] =  1
        [1,4] = 0
        [1,5] = -
      }
      

      希望有帮助!

      【讨论】:

        【解决方案3】:

        我觉得你可以试试num2cell

        B = num2cell(A);
        B(cellfun(@isnan,B)) = {"_"};
        

        给了

        >> B
        B =
        {
          [1,1] = _
          [1,2] = _
          [1,3] =  1
          [1,4] = 0
          [1,5] = _
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多