長さが等しくない 2 つの列ベクトルcalib
(75 要素) とnu
(1436 要素) があります。の要素と 0.001 の許容範囲内nu
で一致する要素を検索し、結果のベクトルに対して操作を実行する必要があります。calib
すべての要素は文字列ではなく数字です。
交差が進むべき道だと思いましたが、許容範囲を導入する方法がわかりません。また、絶対差分ステートメントで for ループを使用してもうまくいかないようでした。
どんな助けでも大歓迎です。
round
ベクトルの 1 つで 0.001 の精度のみを表示してから を使用できますismember
。または、FEX からismemberf - 浮動小数点 ISMEMBER (つまり、丸めの許容範囲) を使用するだけです。
これには別の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 がないため、コードはテストされていません
助けてくれてありがとう。行列の計算は、私が行く必要がある場所に私を連れて行ってくれました。これを行うためのより良い方法があるかどうかはわかりませんが、動作するコードは次のとおりです。
% 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;