7

MATLAB には A と B の 2 つのベクトルがあります。B にはいくつかのインデックス (1 から最後まで) が含まれています。ランダム インデックス R (ベクトル インデックスの範囲内) があります。A[z] を選択する関数 (またはステートメント) を書きたいと思います。ここで、z は、B に含まれていない R に最も近い数値 (つまり、インデックス) です。

例:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

最も近いインデックスは 2 であり、5-2<9-5 であり、2 は B に含まれていないため、A[2] = 3; であるため、関数は 3 を返す必要があります。

ありがとう

4

3 に答える 3

6

ジェイコブの答えを改善すると、正しい解決策は次のとおりです。

[result, z] = min(abs(R - setxor(B, 1:numel(A))))

そしてあなたの場合、それはz = 2とをもたらしますresult = A(2) = 3

于 2012-11-05T08:25:51.290 に答える
2

私が正しく理解していれば、最初に除外を実行して、B にないインデックスを見つけることができますexcl = A(setxor(B,1:length(A)))。次に、このように分を取得するのは簡単excl(min(abs(R-excl)))です。

于 2012-11-05T08:25:58.870 に答える
0

setdiff および setxor 関数は結果をソートすることに注意してください。

tmpSet = R - setdiff(1:numel(A),B);
[~,z] = min(abs(tmpSet));
z = tmpSet(z);
Result = A(R-z);

質問の同じ例:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

tmpSet = 5 - {1 2 9} = {4 3 -4}
z = 2
z = 3
Result = A(5-3) = A(2) = 3 

アイデアありがとうございます。

于 2012-11-05T12:59:55.907 に答える