我下面有一些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循环,其中外部是内部的子范围,但是内部不包括外部的子范围,最重要的是速度快并且不会创建大量内存用法像过滤器一样?
答案 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
您也许可以在自己的线程中执行每个循环。