将矩阵转换为单元格并将NaN替换为'-'

问题描述 投票:1回答:3

我有一个矩阵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
3个回答
1
投票

我认为您可以尝试num2cell

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

给出

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

3
投票

您使用mat2cell的想法很好,也许用法不清楚!?您也可以使用mat2cell,它似乎更易于使用。另外,num2cell还可以用于单元格数组,它可能比num2cell和类似的数组更有效:

indexing with logical values

输出:

cellfun

希望有帮助!


2
投票

您可以将两次尝试配对,请注意,您[[do想要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] = - } ,因为您需要逻辑数组。

'UniformOutput'
或者,您可以只使用循环...

cellfun

这似乎很钝,但是如果您在为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
/ etc的正确实现而苦苦挣扎,那么可以保证用这些函数编写的代码对于您自己和其他人来说将很难维护!至少循环是显式的,并且这些天并不一定会变慢(尽管如果您将数字数据存储在混合类型的单元格数组中,那么我必须假设性能绝对不是最重要的)。
© www.soinside.com 2019 - 2024. All rights reserved.