【问题标题】:how to start for-next-loop from central value out to extremes如何从中心值开始 for-next-loop 到极端
【发布时间】:2020-12-12 03:43:40
【问题描述】:

例如,如果想要从 1 到 5 迭代一个 for 循环,应该这样写 for i=1:1:5。让我在解释中使用Julialang。在这种情况下,索引 从 1 到 5 开始,步长为 1。如果我更愿意从它的中心值迭代 像3 -> 4 -> 2 -> 5 -> 1这样的极端,我想知道 我应该如何实施。我可以想象应该创建一些数组。 但是,我想知道如何为这个数组分配元素。

提前感谢您的好意建议。

【问题讨论】:

  • 您在寻找哪种语言的答案?你为什么要标记这个rpythonjulia
  • 我更喜欢 Julialang,但我也可以将其他两个转换为 Julia。

标签: python r for-loop iterator julia


【解决方案1】:

您可以计算每个元素到中心值的距离,然后使用该距离对数组进行排序。例如

a = 1:5
for i in sortperm(abs.(a .- sum(a) / length(a)))
    println(a[i])
end

sortperm 返回排序后的索引。或者,您可以创建一个排序数组。

a = 1:5
b = sort(a, by=x->abs(x-sum(a)/length(a)))
# now b is [3,2,4,1,5] for you to iterate

【讨论】:

  • 请注意这是中心值,但尽管海报的措辞如此,我认为真正的问题是从中心索引向外迭代。
  • 关于 tholy 的评论,你的意思是迭代次数(在这个 MWE 案例中,这是 5)必须是奇数才能在中心值和索引之间重合吗?
  • 如果目标是迭代索引(即a 始终是一个从 1 开始的单位范围),将会有一些更高效的技巧。不过这个 sn-p 应该仍然可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2015-11-02
相关资源
最近更新 更多