1

長さが等しくない 2 つの列ベクトルcalib(75 要素) とnu(1436 要素) があります。の要素と 0.001 の許容範囲内nuで一致する要素を検索し、結果のベクトルに対して操作を実行する必要があります。calibすべての要素は文字列ではなく数字です。

交差が進むべき道だと思いましたが、許容範囲を導入する方法がわかりません。また、絶対差分ステートメントで for ループを使用してもうまくいかないようでした。

どんな助けでも大歓迎です。

4

3 に答える 3

3

roundベクトルの 1 つで 0.001 の精度のみを表示してから を使用できますismember。または、FEX からismemberf - 浮動小数点 ISMEMBER (つまり、丸めの許容範囲) を使用するだけです。

于 2013-03-04T21:13:32.193 に答える
1

これには別のMatlabic(=マトリックス)の方法があります。これがどれほど計算効率がよいかはわかりませんが、Matlab は行列に適しているはずです。

私は と を仮定しsize(nu) = [75,1]size(calib) = [1436,1]います。最初のステップは、2 つの大きな 1436x75 行列を作成することです (転置に注意してください)。

calib_m = repmat(calib',size(nu))
nu_m = repmat(nu,size(calib'))

1436x75次に、上記の絶対差である別のマトリックスを作成できます。

diff_m = abs(calib_m - nu_m)

次に、各列で最小の要素を見つけます。

min_m = min(diff_m)

次に、しきい値を導入して論理インデックス作成を行うことができます (これは高速である必要があります)。

ok_calib_elements = calib(min_m < THRESHOLD)

PS: ここには Matlab がないため、コードはテストされていません

于 2013-03-04T21:45:17.613 に答える
0

助けてくれてありがとう。行列の計算は、私が行く必要がある場所に私を連れて行ってくれました。これを行うためのより良い方法があるかどうかはわかりませんが、動作するコードは次のとおりです。

% set tolerance for finding equal values in the data
find_tol = 1E-3; 

% make matrices of the data and clibration vectors
nu_m = repmat(nu',size(calib));
calib_m = repmat(calib,size(nu'));

% subtract the matrices
diff_m = calib_m - nu_m;

% find the minimum of each column within the tolerance and compute the
% average shift
find_min_nu = find(diff_m < find_tol & diff_m > -find_tol);
min_nu = diff_m(find_min_nu);
shift_nu = mean(min_nu);

% output calibrated values
calib_nu = nu + shift_nu;
于 2013-03-05T20:42:10.503 に答える