Matlab:用不包括自身的行的最小值替换矩阵中的元素

Posted

技术标签:

【中文标题】Matlab:用不包括自身的行的最小值替换矩阵中的元素【英文标题】:Matlab: replace element in matrix by the minimum of the row excluding itself 【发布时间】:2017-09-24 04:48:40 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您可以使用 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' 选项会丢弃窗口超出矩阵边缘的结果。

【讨论】:

【参考方案2】:

我通过两次调用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

【讨论】:

' 不是转置。 .' 我可以确定我的 索引 是实数,所以它实际上是相同的 @SardarUsama 说得好:-) tough... :) 我记下了。

以上是关于Matlab:用不包括自身的行的最小值替换矩阵中的元素的主要内容,如果未能解决你的问题,请参考以下文章

求某列第二最大值所在行的SQL

Python:返回矩阵中最小值的行索引

矩阵中所有行的最小值

在 MATLAB 中找到三维矩阵中的有符号最小值

怎么求Mat矩阵的最大最小值

在matlab编程时,怎样取出矩阵的每行中的最小值?