繁体   English   中英

找出给定行到末尾的最大元素

[英]find out the largest element from the given row to the end

假设我有一个矩阵a和每列的给定行号列表:

>> a=magic(5)

>> a =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>> b=[2 3 4 5 1];  %% Note that the elements in b is arbitrary

现在我想分别从第1列第2:end行, 2:end和第2列第3:end行, 3:end ... ...和第5列第1:end行, 3:end找到最大值,是否有不使用for循环的方法? 我尝试a(b:end,:)但是对于每一列a(b:end,:)它都从b(1)开始。

将不需要的条目设置为NaN ,然后使用max

ind = bsxfun(@lt, (1:size(a,1)).', b); %'// logical index
a(ind) = NaN; %// set those entries to NaN
result = max(a); %// compute maximum of each column

这适用于任意b (不一定是对角线形式)。

这是使用arrayfun的另一种可能性:

res = arrayfun(@(n) max(a(b(n):end,n)),1:numel(b))

对角线?

 [m n] = size(a); 
 [tril(a(:,1:n-1),-1), a(:,n)]

然后

max([tril(a(:,1:n-1),-1), a(:,n)])

结果

23 18 25 2 22

 result = max(a-triu(inf(size(a)),1),[],1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM