【问题标题】:Clean way to loop over a masked list in Julia在 Julia 中循环遍历蒙面列表的干净方法
【发布时间】:2021-03-28 15:08:14
【问题描述】:

在 Julia 中,我有一个存储在 all_neighbors[loc] 中的位置的邻居列表。这使我可以使用 for neighbor in all_neighbors[loc] 语法方便地快速遍历这些邻居。这导致可读的代码如下:

active_neighbors = 0
for neighbor in all_neighbors[loc]
    if cube[neighbor] == ACTIVE
       active_neighbors += 1
    end
end

精明的读者会发现,这只不过是一种简化。因为我只是在计算活跃的邻居,所以我想我可以使用count 函数在单行中做到这一点。然而,

# This does not work
active_neighbors = count(x->x==ACTIVE, cube[all_neighbors[loc]])

不起作用,因为all_neighbors 掩码没有被正确解释为cube 数组上的掩码。有谁知道写这个减少的最干净的方法?我想出的另一种解决方案是:

active_neighbors = count(x->x==ACTIVE, [cube[all_neighbors[loc][k]] for k = 1:length(all_neighbors[loc])])

但我真的不喜欢这个,因为它的可读性比我开始的还要低。感谢您的建议!

【问题讨论】:

    标签: foreach julia reduction


    【解决方案1】:

    这应该可行:

    count(x -> cube[x] == ACTIVE, all_neighbors[loc])
    

    【讨论】:

    • 可读性极强,正是我想要的。干杯。
    • 或理解:count(cube[x] == ACTIVE for x in all_neighbors[loc])
    • 使用理解可能会慢一些(我不确定这在您的用例中是否重要)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多