Matlab:用排除自身的行的最小值替换矩阵中的元素

时间:2017-04-26 16:41:21

标签: matlab matrix minimum

我想用行的最小值替换每个元素,而不是元素本身。

示例:输入In = [1 2 3; 4 5 6; 7 8 9],输出out = [2 1 1; 5 4 4; 8 7 7]

编辑:没有for循环,除非计算效率更高

2 个答案:

答案 0 :(得分:3)

您可以使用MATLAB R2016a中引入的新函数movmin来解决此问题:

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<canvas id="chart" width="218"></canvas>

以上工作原理是首先索引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选项会丢弃窗口延伸超出矩阵边缘的结果。

答案 1 :(得分:1)

我通过两次拨打min来完成。您可以使用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