我有一个矩阵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] = _
}