1

我正在寻找一种方法来忽略矩阵中的特定条目,以便在 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 值] NaN,但在线性回归期间,matlab 将 NaN 包含在计算中,因此我得到了 NaN 输出。任何人都可以提出一个忽略这些条目或完全忽略 NaN 计算的好方法吗?(注意:y 中的列通常会有不同的值组合,所以我不能消除整行)。

4

2 回答 2

2

如果 NaN 出现在 X 和 Y 矩阵中的相同位置,则可以使用如下函数调用your_function( X(~isnan(X)), Y(~isnan(X)) )。如果 NaN 没有出现在相同的位置,您必须首先通过类似 `X(~isnan(X)| isnan(Y))' 的方式找到有效索引

于 2013-01-29T15:33:04.053 回答
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
于 2013-01-29T16:03:11.893 回答