我有一个标有P1,P2,P3,..,P12的数组列表。它们都是1017x1017矩阵,充满了NaN,并且没有数据存在不必要的间隙。我知道如何为每个“P”修复此问题并将它们堆叠成单个列向量:
P1(isnan(P1)) = 0 ;
c1 = nonzeros(P1);
P2(isnan(P2)) = 0;
c2 = nonzeros(P2);
C = vertcat(c1,c2);
等等......其中c1是P1等的值列。
我试过这样做:
for k = 1:12
A = ['P',num2str(k)];
B = ['c',num2str(k)];
A(isnan(A)) = 0;
B = nonzeros(A);
cTot = vertcat(B);
end
但它根本不起作用......任何想法?
答案 0 :(得分:0)
试试这个:
for k = 1:12
A = evalin('caller', ['P',num2str(k)]);
B = evalin('caller', ['c',num2str(k)]);
% ... Do what you have to do with A and B
end
注意:如果代码在脚本而不是函数内,则应将'caller'
替换为'base'
。
修改强>
要完成,这是一个eval
的解决方案。正如评论中所述,应尽可能避免eval
(或evalin
),但在您的情况下,没有太多替代方案。以下解决方案还将P1
,... P12
的值堆叠到单个数组C
中:
% Prepare result array
C = [];
for k = 1:12
% Get A from Px
eval(['A = P' num2str(k) ';']);
% Set NaN as zeros
A(isnan(A)) = 0;
% Concatenate non-zero values
C = [C ; nonzeros(A)];
end
% C contains the desired result
注意:顺便说一句,将NaN
更改为零是一个非常糟糕的习惯,NaN
应保持NaN
。