0

現在、MATLAB に「cols」と呼ばれる 4 * 5057 の行列があります。私がやろうとしているのは、最初の行の k 個の最小値を見つけて、それらを「mins」という新しい行列に格納することです。

したがって、k が 3 だったとします。この関数で「列」の最初の行全体をスキャンし、最小の 3 つの値を選択して、その列全体を新しい行列にコピーしたいと思います。

最後の部分の実行方法は理解していますが、実際に単一の最小数だけでなく複数を見つける関数を実際に記述する方法を指定しているだけで、私は困惑しています。

min 関数に関する MathsWorks ページと、検索で出てきた他のいくつかのページを読みましたが、運がありませんでした。

どんな助けでも大歓迎です!よろしくお願いします!

4

2 に答える 2

0

列の順序の一貫性を保つ必要がある場合sortrowsは、仕事をすることができます。行を操作するためsortrows、2 回転置する必要があります。@nibot の答えを拡張すると、

   col_sorted = sortrows(cols')';
   k_min = col_sorted(:,1:k);

例えば

   cols =  
           0.8147    0.9134    0.2785    0.9649
           0.9058    0.6324    0.5469    0.1576
           0.1270    0.0975    0.9575    0.9706

   sortrows(cols')' = 
           0.2785    0.8147    0.9134    0.9649
           0.5469    0.9058    0.6324    0.1576
           0.9575    0.1270    0.0975    0.9706

次に、最初の列を抽出するだけkです。

于 2013-05-05T08:45:47.183 に答える
0

kベクトルから最高値または最低値を取得する最も簡単な方法はsort、最初に最初 (または最後) のk値を取得することです。

これは最も効率的なアルゴリズムではありませんが、おそらく目的には十分な速さです。

現在、MATLAB に「cols」と呼ばれる 4 * 5057 の行列があります。私がやろうとしているのは、最初の行の k 個の最小値を見つけて、それらを「mins」という新しい行列に格納することです。

これを試して:

v = cols(1, :);   % Get the first row of "cols"
v = sort(v);      % sort it    
mins = v(1:k);    % take the first k values

値を並べ替えた場合、それはマトリックスの一番上の行にのみ影響しますか? 最小値の下の値も必要なので、それらを混同することはあまり好ましくありません:/

これを試して:

mins = sortrows(cols.', 1).'
mins = mins(:, 1:k)

またはこれ:

v = cols(1, :);         % Get the first row of "cols"
[v, ix] = sort(v);      % sort it, and remember the permutation
mins = cols(:, ix(1:k))
于 2013-05-05T08:34:36.453 に答える