我正在寻找一种方法来忽略矩阵中的特定条目,以便在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中的列通常具有不同的值组合,因此我无法消除整行。)
答案 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