我想用行中的最小值替换每个元素,而不是元素本身。
例子:输入 In = [1 2 3; 4 5 6; 7 8 9]
,输出out = [2 1 1; 5 4 4; 8 7 7]
编辑:没有 for
循环,除非计算效率更高
最佳答案
你可以使用一个新函数movmin
在 MATLAB R2016a 中引入了移动最小值来解决这个问题:
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'
选项会丢弃窗口超出矩阵边缘的结果。
关于Matlab:用不包括自身的行的最小值替换矩阵中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43640022/