【问题标题】: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] = _
}