我必須比較 2M 串列,每個串列包含 3136 個元素
我現在的做法是:
function compare_matrices(connectivity_list, configuration_list)
i = 1
while i <= size(connectivity_list, 1)
x = connectivity_list[i]
j = i 1
while j <= size(connectivity_list, 1)
if all(isapprox(x[k], connectivity_list[j][k] ; atol = 0.0001) for k=1:1540)
deleteat!(connectivity_list, j)
deleteat!(configuration_list, j)
else
j = 1
end
end
i = 1
end
return configuration_list
end
有關資訊,這些串列最初是我矢量化和排序的矩陣,以便能夠比較每個元素的元素。您可以猜到,這將需要相當長的時間。
...
push!(connectivity_list, sort(vec(connectivity)))
...
連通性是 2D(下三角)矩陣
有沒有更快的方法來使用 Julia 以這種方式比較串列?我考慮過使用 Sets 并比較它們,但有些元素是相似的,所以這是不可能的。
uj5u.com熱心網友回復:
在一些人為的資料上,這大約快 70 倍,所以在你的真實資料上期待不同的因素。主要變化如下:
- 使用
flag陣列來跟蹤不同的向量和近似相等的向量,以避免洗掉回圈內的向量。 - 跳過
flag成為的向量false - 使用
abs(x[k]-y[k]) <= 0.0001代替isapprox - 將修改后的陣列回傳為
configuration_list[flag]
function compare_matrices2(connectivity_list, configuration_list)
l = length(connectivity_list)
m = length(connectivity_list[1])
flag = trues(l)
for i = 1:l
flag[i] || continue
x = connectivity_list[i]
for j = i 1:l
flag[j] || continue
y = connectivity_list[j]
if all(abs(x[k]-y[k]) <= 0.0001 for k=1:m)
flag[j] = false
end
end
end
return configuration_list[flag]
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519854.html
標籤:表现朱莉娅
