将矩阵转换为单元格并将 NaN 替换为“-”
Convert matrix to cell and replace NaN with '-'
我有一个矩阵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] = _
}
您可以将您的两次尝试配对,请注意您确实想要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
/等的正确实现而苦苦挣扎,那么您可以保证使用这些函数编写的代码将更难维护自己和他人!至少循环是明确的,而且现在不一定很慢(尽管如果您将数字数据存储在混合类型的元胞数组中,那么我不得不假设性能无论如何都不是最重要的)。
您使用 mat2cell
is good, maybe the usage just isn't clear!? You could also use num2cell
, which seems a bit more easier to use. Additionally, 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] = -
}
希望对您有所帮助!
我有一个矩阵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] = _
}
您可以将您的两次尝试配对,请注意您确实想要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
/等的正确实现而苦苦挣扎,那么您可以保证使用这些函数编写的代码将更难维护自己和他人!至少循环是明确的,而且现在不一定很慢(尽管如果您将数字数据存储在混合类型的元胞数组中,那么我不得不假设性能无论如何都不是最重要的)。
您使用 mat2cell
is good, maybe the usage just isn't clear!? You could also use num2cell
, which seems a bit more easier to use. Additionally, 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] = -
}
希望对您有所帮助!