2017-04-26 13 views

答えて

1

ない限り、私はminには2回の呼び出しでそれをやりました。あなたはsort(In,2)と同様に行うことができます。

% input matrix 
In = [1 2 3; 4 5 6; 7 8 9]; 
% compute minimum for each row 
[val,mincols] = min(In,[],2); 
% generate matrix made of minimum value of each row 
Out = repmat(val,[1 size(In,2)]); 
% find indexes of minimum values 
minrows = 1:size(In,1); 
minidxs = sub2ind(size(In),minrows,mincols'); 
% replace minimum values with infs 
In(minidxs) = inf; 
% find next minimum values 
val = min(In,[],2); 
% set original minimum elements to next minimum values 
Out(minidxs) = val 
+3

[** ''** **](https://www.mathworks.com/help/matlab/ref/ctranspose.html)は転記されません。 [** '.'** **](https://www.mathworks.com/help/matlab/ref/transpose.html)は –

+0

です。私の* indexes *は実数なので実際には同じです – user2999345

+2

実際には良い練習ではない –

3

あなたが動く最小でこれを解決するためのMATLAB R2016aで導入された新しい機能movminを使用することができます。

In = [1 2 3; 4 5 6; 7 8 9]; % Sample data 
C = size(In, 2);    % Get the number of columns 
out = movmin(In(:, [2:C 1:(C-1)]), [0 C-2], 2, 'Endpoints', 'discard') 

out = 

    2  1  1 
    5  4  4 
    8  7  7 

最初のインデックスにより、上記の作品Inの列を行列のラップアラウンドコピーを作成し、各行に沿ってサイズC-1のウィンドウをスライドさせて最小値を計算します。 'Endpoints', 'discard'オプションは、ウィンドウがマトリックスの端を越えている場合に結果を破棄します。

関連する問題