如何在MATLAB中忽略NaN?

时间:2013-01-29 15:20:41

标签: matlab

我正在寻找一种方法来忽略矩阵中的特定条目,以便在MATLAB中进行后续的线性回归

我有两个基质:y =

    9.3335    7.8105    5.8969    3.5928
    23.1580   19.6043   15.3085    8.2010
    40.1067   35.2643   28.9378   16.6753
    56.4697   51.8224   44.5587   29.3674
    70.7238   66.5842   58.8909   42.7623
    83.0253   78.4561   71.1924   53.8532

和x =

    300   300   300   300
    400   400   400   400
    500   500   500   500
    600   600   600   600
    700   700   700   700
    800   800   800   800

我需要对y在20到80之间的点进行线性回归,因此我需要一种方法来完全自动化该过程。我尝试制作外围y值[及其相应的x值] NaNs,但在线性回归期间,matlab在计算中包含了NaN,因此我获得了NaN输出。任何人都可以建议一种忽略这些条目或忽略NaN完全计算的好方法吗? (注意:y中的列通常具有不同的值组合,因此我无法消除整行。)

2 个答案:

答案 0 :(得分:2)

如果NaN出现在X和Y矩阵的相同位置,则可以使用如下your_function( X(~isnan(X)), Y(~isnan(X)) )之类的函数调用。如果NaN不出现在相同的位置,你必须首先通过诸如“X(~isnan(X)| isnan(Y))”之类的东西找到有效的指数

答案 1 :(得分:0)

由于您分别对每个列执行回归,因此您只需将索引形成具有有效y值的行:

nCols = size(x,2);

results = zeros(2,nCols);
validY = y>20 & y<80; %# a logical array the size of y with valid entries
nValid = sum(validY,1);

for c = 1:nCols
    % results is [slope;intercept] in each column
    results(:,c) = [x(validY(:,c),c),ones(nValid(c),1)]\y(validY(:,c),c);

end