如何在Matlab中设置数组中每行(或每列)的最小值?

如何在Matlab中设置数组中每行(或每列)的最小值?,matlab,min,Matlab,Min,我在matlab中有一个数组,例如 a=rand([3,3]) a = 0.8308 0.9172 0.7537 0.5853 0.2858 0.3804 0.5497 0.7572 0.5678 现在,我想将每行的最小值设置为0。结果应该是: a = 0.8308 0.9172 0 0.5853 0 0.3804 0 0.7572 0.5678 我不知道如何为此使用[Y,I]=min(a,[],

我在matlab中有一个数组,例如

a=rand([3,3])
a =

0.8308    0.9172    0.7537
0.5853    0.2858    0.3804
0.5497    0.7572    0.5678
现在,我想将每行的最小值设置为0。结果应该是:

a =

0.8308    0.9172    0
0.5853    0         0.3804
0         0.7572    0.5678

我不知道如何为此使用
[Y,I]=min(a,[],2)
函数。谢谢。

正如您所说,您可以使用

[~, col] = min(a, [], 2);
现在,您可以使用
sub2ind
将条目设置为零:

a( sub2ind(size(a), 1:size(a,1), col.') ) = 0;

您可以打开它。

一种低效的方法是循环每一行,并使用find命令查找特定行中的所有极小值

n = 10;
A = rand(n,n);    
for ii = 1:n
ind = find(A(ii,:) == min(A(ii,:)));
A(ii,ind) = 0;
end
如果存在多个最小值,则将所有这些值设置为零


希望这有帮助。

如果您担心同一行中存在多个最小值:

row_min = min(a, [], 2);
a( bsxfun(@eq, row_min, a) ) = 0;

不需要循环(与回答相反)。

错误:不平衡或意外的括号或括号。我清除了最后一个括号,但仍然不起作用..使用sub2in时出错下标向量的大小必须相同。仍然不工作。@Ivoverat已修复。非常好。干得好。谢谢。@ IvOuttAT如果这个解决方案对你有用,请考虑点击它旁边的“V”图标来“接受”它。谢谢不需要循环。更好地使用逻辑索引而不是
find
。它可以很好地为多维数组进行扩展。谢谢