Matlabでsort、ソートされたベクトルと、どのベクトル要素がどこに移動されたかを示すインデックスベクトルの両方を返します。
[v, ix] = sort(u);
ここで、vはのすべての要素を含むuがソートされたベクトルです。ixの各要素の元の位置を示すベクトルvですu。Matlabの構文を使用して、u(ix) == v。
私の質問:とuからどのように取得しますか?vix
もちろん、私は単に使用することができます:
w = zero(size(v));
for i = 1:length(v)
w(ix(i)) = v(i)
end
if nnz(w == u) == length(u)
print('Success!');
else
print('Failed!');
end
しかし、私は、これを行うためのよりエレガントな、単一のステートメント、ベクトル化された方法があるというこの舌先の感覚を持っています。
単に使用するのではなく、なぜこれを行う必要があるのか疑問に思っている場合u:ソート後の位置に基づいてベクトルの各要素を調整するBenjamini-Hochbergプロシージャを実装しようとしましたが、調整後に元の順序を復元することが重要でした自分。