首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:用排除自身的行的最小值替换矩阵中的元素

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

Stack Overflow用户
提问于 2017-04-26 16:41:20
回答 2查看 284关注 0票数 4

我希望将每个元素替换为其行的最小值,但元素本身除外。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-26 17:21:33

我给min打了两个电话。您也可以使用sort(In,2)进行类似的操作。

代码语言:javascript
复制
% 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
票数 1
EN

Stack Overflow用户

发布于 2017-04-26 19:52:00

您可以使用在MATLAB R2016a中引入的一个新函数movmin来用移动最小值来解决这个问题:

代码语言:javascript
复制
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'选项就会丢弃结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43640022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档