在Matlab中对多个数组执行相同的操作

时间:2015-02-26 14:43:14

标签: matlab

我有一个标有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

但它根本不起作用......任何想法?

1 个答案:

答案 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