1

次のコードをベクトル化するか、より効率的にしようとしています。

[Y,k] = min(abs(dxcp-X));
X = dxcp(k);

このコードの目的は、値 X を x の許容値の配列 (dxcp) と比較し、X を配列 dxcp 内の最も近い値に割り当てることです。例えば:

X は 9 に等しく、dxcp 配列は [ 1、2、3、6、10、20] です。2 行目は、X を 10 に変更します。

X を数値の配列として入力できるようにスクリプトを変更しようとしていますが、この場合に上記のコードを機能させる最も効率的な方法は何だろうと考えていました。もちろん、私は使用できます:

for i = 1:numel(X)
   [Y,k] = min(abs(dxcp-X(i)));
   X(i) = dxcp(k);
end

しかし、これをより効率的に達成する方法がなければならないと感じています。乾杯、nzbru。

4

1 に答える 1

3

bsxfunケースをベクターケースに拡張するには、を使用する必要があります。

コード

dxcp = [1 2 3 6 10 20];
X = [2 5 9 18]

abs_diff_vals = abs(bsxfun(@minus,dxcp,X')); %%//'
[~,k] = min(abs_diff_vals,[],2);
X = dxcp(k)

出力

X =
     2     5     9    18

X =
     2     6    10    20
于 2014-04-25T13:12:17.113 に答える