1

MATLAB での後続の線形回帰のために、行列内の特定のエントリを無視する方法を探しています

2 つの行列があります: 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 に答える