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



我有一个矩阵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)) = {'-'};

这不起作用。

您使用mat2cell的想法很好,可能只是用法不清楚!?您也可以使用num2cell,它看起来更容易使用。此外,使用逻辑值进行索引也适用于单元数组,这可能比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] = -
}

希望能有所帮助!

您可以将两次尝试配对,请注意,您确实需要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的正确实现,那么您可以保证使用这些函数编写的代码将更难为自己和他人维护!至少循环是显式的,而且现在不一定很慢(尽管如果您将数字数据存储在混合类型的单元阵列中,那么我不得不假设性能无论如何都不是最重要的(。

我想你可以试试num2cell

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

它给出

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

相关内容

  • 没有找到相关文章

最新更新