在 Julia 中循环遍历屏蔽列表的简洁方法
Clean way to loop over a masked list in Julia
在 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])])
但我真的不喜欢这个,因为它比我开始时的可读性还要差。感谢您的任何建议!
这应该有效:
count(x -> cube[x] == ACTIVE, all_neighbors[loc])
在 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])])
但我真的不喜欢这个,因为它比我开始时的可读性还要差。感谢您的任何建议!
这应该有效:
count(x -> cube[x] == ACTIVE, all_neighbors[loc])