在 Julia 中对两个数组中元素的所有组合(强力)进行简单计算,以获得更好的性能
Simple calculation for all combination (brute force) of elements in two arrays, for better performance, in Julia
我是 Julia 的新手(对 Python 有一些经验)。我开始使用 Julia 的主要原因是大规模数据处理的性能更好。
我想得到两个数组中所有可能组合的值 (int) 的差异。
假设我有两个数组。
a = [5,4]
b = [2,1,3]
然后我想要所有组合的差异,比如
a[1] - b[1], a[1] - b[2] ..... a[3] - b[1], a[3] - b[2]
结果将是 3 x2 数组 [3 2; 4 3; 2 1]
然后我想到的是
a = [5,4]
b = [2,1,3]
diff_matrix = zeros(Int8, size(b)[1], size(a)[1])
for ia in eachindex(a)
for ib in eachindex(b)
diff_matrix[ib,ia]= a[ia] - b[ib]
end
end
println(diff_matrix)
它有效,但它在迭代中使用迭代,我认为性能不会很好。在实际应用中,数组的长度会很长(比如几百),这个过程需要对数百万的数组组合进行。
这个任务有更好的(更好的性能,更简单的代码)方法吗?
如果您将代码包装在一个函数中,您的代码已经相当快了。
这正是 Julia 循环速度快的强大之处。您唯一需要避免的是在计算中使用全局变量(因为它们导致代码不是 type stable)。
我写的代码会“相当快”,因为它可以通过一些低级技巧变得更快。但是,在这种情况下,您可以只写:
julia> a = [5,4]
2-element Vector{Int64}:
5
4
julia> b = [2,1,3]
3-element Vector{Int64}:
2
1
3
julia> permutedims(a) .- b
3×2 Matrix{Int64}:
3 2
4 3
2 1
而且这段代码会很快(而且更简单)。
我是 Julia 的新手(对 Python 有一些经验)。我开始使用 Julia 的主要原因是大规模数据处理的性能更好。
我想得到两个数组中所有可能组合的值 (int) 的差异。
假设我有两个数组。
a = [5,4]
b = [2,1,3]
然后我想要所有组合的差异,比如 a[1] - b[1], a[1] - b[2] ..... a[3] - b[1], a[3] - b[2]
结果将是 3 x2 数组 [3 2; 4 3; 2 1]
然后我想到的是
a = [5,4]
b = [2,1,3]
diff_matrix = zeros(Int8, size(b)[1], size(a)[1])
for ia in eachindex(a)
for ib in eachindex(b)
diff_matrix[ib,ia]= a[ia] - b[ib]
end
end
println(diff_matrix)
它有效,但它在迭代中使用迭代,我认为性能不会很好。在实际应用中,数组的长度会很长(比如几百),这个过程需要对数百万的数组组合进行。
这个任务有更好的(更好的性能,更简单的代码)方法吗?
如果您将代码包装在一个函数中,您的代码已经相当快了。
这正是 Julia 循环速度快的强大之处。您唯一需要避免的是在计算中使用全局变量(因为它们导致代码不是 type stable)。
我写的代码会“相当快”,因为它可以通过一些低级技巧变得更快。但是,在这种情况下,您可以只写:
julia> a = [5,4]
2-element Vector{Int64}:
5
4
julia> b = [2,1,3]
3-element Vector{Int64}:
2
1
3
julia> permutedims(a) .- b
3×2 Matrix{Int64}:
3 2
4 3
2 1
而且这段代码会很快(而且更简单)。