我有一个矩阵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)) = {'-'};
这不起作用。
我认为您可以尝试num2cell
B = num2cell(A);
B(cellfun(@isnan,B)) = {"_"};
给出
>> B
B =
{
[1,1] = _
[1,2] = _
[1,3] = 1
[1,4] = 0
[1,5] = _
}
您使用mat2cell
的想法很好,也许用法不清楚!?您也可以使用mat2cell
,它似乎更易于使用。另外,num2cell
还可以用于单元格数组,它可能比num2cell
和类似的数组更有效:
indexing with logical values
输出:
cellfun
希望有帮助!
您可以将两次尝试配对,请注意,您[[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的正确实现而苦苦挣扎,那么可以保证用这些函数编写的代码对于您自己和其他人来说将很难维护!至少循环是显式的,并且这些天并不一定会变慢(尽管如果您将数字数据存储在混合类型的单元格数组中,那么我必须假设性能绝对不是最重要的)。