gpt4 book ai didi

matrix - 在 Julia 中将元组向量转换为矩阵

转载 作者:行者123 更新时间:2023-12-05 09:04:29 35 4
gpt4 key购买 nike

假设我们有一个函数,它给我们以下信息:

julia> ExampleFunction(Number1, Number2)
5-element Vector{Tuple{Int64, Int64}}:
(2, 2)
(2, 3)
(3, 3)
(3, 2)
(4, 2)

我想转换Vector{Tuple{Int64, Int64}}变成一个矩阵,或者在我的例子中,我想把它转换成一个 5x2 矩阵。

最佳答案

从你的问题中,长度为 2 的元组的 5 元素向量(总共有 10 个元素)应该如何转换为包含 6 个元素的 3x2 矩阵并不完全清楚,但假设你的意思是 5x2 这是一种方法这样做:

julia> x = [(1,2), (2, 3), (3, 4)]
3-element Vector{Tuple{Int64, Int64}}:
(1, 2)
(2, 3)
(3, 4)

julia> hcat(first.(x), last.(x))
3×2 Matrix{Int64}:
1 2
2 3
3 4

编辑:正如 Phips 在下面提到的替代方案,这里有一个关于 Julia 1.7beta3、Windows 10 的快速基准测试——我也加入了一个循环版本,因为在 Julia 中尝试一个简单的循环总是有意义的:

julia> convert_to_tuple1(x) = hcat(first.(x), last.(x))
convert_to_tuple1 (generic function with 1 method)

julia> convert_to_tuple2(x) = PermutedDimsArray(reshape(foldl(append!, x, init = Int[]), 2, :), (2, 1))
convert_to_tuple2 (generic function with 1 method)

julia> function convert_to_tuple3(x)
out = Matrix{eltype(x[1])}(undef, length(x), length(x[1]))
for i ∈ 1:length(x)
for j ∈ 1:length(x[1])
out[i, j] = x[i][j]
end
end
out
end
convert_to_tuple3 (generic function with 1 method)

julia> xs = [(rand(1:10), rand(1:10)) for _ ∈ 1:1_000_000];

julia> using BenchmarkTools

julia> @btime convert_to_tuple1($xs);
15.789 ms (6 allocations: 30.52 MiB)

julia> @btime convert_to_tuple2($xs);
22.067 ms (21 allocations: 18.91 MiB)

julia> @btime convert_to_tuple3($xs);
7.286 ms (2 allocations: 15.26 MiB)

(进一步编辑以添加 $ 用于将 xs 插值到基准测试中)

关于matrix - 在 Julia 中将元组向量转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68543737/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com