各要素を要素自体以外の行の最小値で置きたいと思います。Matlab:マトリックス内の要素を、それ自身を除いた行の最小値で置き換えます。
例:入力In = [1 2 3; 4 5 6; 7 8 9]
、出力out = [2 1 1; 5 4 4; 8 7 7]
EDIT:for
ループせずに、計算効率
各要素を要素自体以外の行の最小値で置きたいと思います。Matlab:マトリックス内の要素を、それ自身を除いた行の最小値で置き換えます。
例:入力In = [1 2 3; 4 5 6; 7 8 9]
、出力out = [2 1 1; 5 4 4; 8 7 7]
EDIT:for
ループせずに、計算効率
ない限り、私は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
あなたが動く最小でこれを解決するための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'
オプションは、ウィンドウがマトリックスの端を越えている場合に結果を破棄します。
[** ''** **](https://www.mathworks.com/help/matlab/ref/ctranspose.html)は転記されません。 [** '.'** **](https://www.mathworks.com/help/matlab/ref/transpose.html)は –
です。私の* indexes *は実数なので実際には同じです – user2999345
実際には良い練習ではない –