2

dist=[1:100]; % distance

% conc. is concentration of size 1x100

conc=1  1   1   1   1   1   1   1   1   1   1   1   1   1   1   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.980000000000000   0.970000000000000   0.950000000000000   0.920000000000000   0.890000000000000   0.850000000000000   0.820000000000000   0.790000000000000   0.750000000000000   0.710000000000000   0.680000000000000   0.640000000000000   0.600000000000000   0.560000000000000   0.520000000000000   0.480000000000000   0.440000000000000   0.400000000000000   0.360000000000000   0.310000000000000   0.270000000000000   0.230000000000000   0.180000000000000   0.140000000000000   0.100000000000000   0.0700000000000000  0.0400000000000000  0.0200000000000000  0.0100000000000000  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

の濃度値 0.16 (または可能な限り近い値) および 0.84 (または可能な限り近い値) に対応するインデックスを見つけたいと考えていますconc。そのインデックスを使用して、それらのインデックスを検索distします。注意すべきことの 1 つは、conc値がサイズ 100 のベクトルの非線形関係で 1 から 0 に減少しているfind()ことです。

できればループを使わずにこれを効率的にできるようにしたいです。これは、集中のためのベクトルが多く、コード内に既に多くのループがあるためです。ありがとう。

4

1 に答える 1

3

簡単な解決策は

[x, i] = min(abs(conc - 0.16));

その後i、インデックスを保持します。これは、ベクトルのすべての要素を比較しますconc。これは、データが順序付けられており、バイナリ検索を実行できるため、無駄ですが、matlabレベルで実装されたバイナリ検索は、100要素のベクトルの場合は遅くなる可能性があります。

于 2012-03-28T19:35:57.043 に答える