筛选Julia中的范围

时间:2019-03-11 02:47:45

标签: filter range julia

我下面有一些MWE。我想要的是拥有一个范围的子部分,与范围的其余部分交互,但不与之交互。

例如,如果范围为1:100,我想创建一个for循环,该循环将使4:6中的每个索引与1:100的所有值进行交互,但不与{{1} }。

我想使用范围/过滤器来执行此操作,以避免生成临时数组。

在我的情况下,总范围是系统中的原子数。该子范围是特定分子中的原子。我需要进行计算,一个分子中的每个原子都与所有其他原子相互作用,而不是同一个分子中的原子相互作用。

进一步

我试图避免使用if语句,因为这样会弄乱并行代码。使用if语句可以做到这一点

4:6

我在我的代码中有实际的索引编制,我永远不会对上面的值进行硬编码...但是我想避免使用该for i=4:6 for j = 1:100 if j == 4 || j==5 || j==6 continue end println(i, " ", j) end end 语句。

试用版

以下内容可以满足我的要求,但我现在意识到,在内存方面使用if很不好,并且使用的数量与filter成线性比例。

b

有没有一种方法可以获取我想要的double for循环,其中外部是内部的子范围,但是内部不包括外部的子范围,最重要的是速度快并且不会创建大量内存用法像过滤器一样?

1 个答案:

答案 0 :(得分:3)

如果确实需要使用内存,请考虑使用范围组件的两个for循环:

systemrange = 1:50
moleculerange = 4:12
for i in systemrange[1]:moleculerange[1]-1
    println(i)
end
for i in moleculerange[end]+1:systemrange[end]
    println(i)
end

您也许可以在自己的线程中执行每个循环。