我有一个矩阵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)) = {'-'};
这不起作用。
答案 0 :(得分:3)
您使用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] = -
}
希望有帮助!
答案 1 :(得分:2)
您可以将两次尝试配对,请注意,您要做要'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
这似乎很钝,但是如果您正在为mat2cell
/ cellfun
/ etc的正确实现而苦苦挣扎,那么可以保证用这些函数编写的代码将很难为您自己和其他!至少循环是显式的,并且这些天并不一定会变慢(尽管如果您将数字数据存储在混合类型的单元格数组中,那么我必须假设性能绝对不是最重要的。)
答案 2 :(得分:1)
我认为您可以尝试num2cell
B = num2cell(A);
B(cellfun(@isnan,B)) = {"_"};
给出
>> B
B =
{
[1,1] = _
[1,2] = _
[1,3] = 1
[1,4] = 0
[1,5] = _
}