【发布时间】:2017-11-04 17:15:55
【问题描述】:
我有一个包含重复非负整数的数组,例如A=[5,5,5,0,1,1,0,0,0,3,3,0,0]。我想在A 中找到最后一个最大值的位置。这是最大的索引i,使得所有j 的A[i]>=A[j]。在我的示例中,i=3。
我试图找到A 的所有最大值的索引,然后找到这些索引的最大值:
A = [5,5,5,0,1,1,0,0,0,3,3,0,0];
Amax = maximum(A);
i = maximum(find(x -> x == Amax, A));
有没有更好的办法?
【问题讨论】:
-
如果您想要一个快速的解决方案,您可能应该在 Base 中编写一个与
findmax完全相同的自定义函数,但将if ai > m替换为if ai >= m。使用标准函数你可以写length(A)+1-indmax(reverse(A)),缺点是它执行A的副本。 -
Alex Arslan 刚刚在 Slack 上告诉我,0.7 有一个
Iterators.reverse函数可以创建一个视图。 -
@MichaelK.Borregaard Iterators.reverse 不支持 indmax。 (
ERROR: MethodError: no method matching keys(::Base.Iterators.Reverse{String}). Slack 是公开的? -
啊,对。是的,但你需要一个邀请。我想如果你去 slackinvite.julialang.org 你可以申请一个。
标签: julia