gpt4 book ai didi

arrays - Julia:一种从数组数组中获取矩阵的快速而优雅的方法

转载 作者:行者123 更新时间:2023-12-03 18:36:05 24 4
gpt4 key购买 nike

有一个包含超过 10,000 对 Float64 值的数组。像这样的东西:

v = [[rand(),rand()], ..., [rand(),rand()]]
我想从中得到一个包含两列的矩阵。可以用一个循环绕过所有对,它看起来很麻烦,但在几分之一秒内给出结果:
x = Vector{Float64}()
y = Vector{Float64}()
for i = 1:length(v)
push!(x, v[i][1])
push!(y, v[i][2])
end
w = hcat(x,y)
我在 this task 中找到的 permutedims(reshape(hcat(v...), (length(v[1]), length(v)))) 解决方案看起来更优雅但完全挂起 Julia,需要重新启动 session 。也许六年前它是最佳的,但现在它不适用于大型阵列。有没有既紧凑又快速的解决方案?

最佳答案

我希望这对您来说足够简短和有效:

 getindex.(v, [1 2])
如果你想要更简单的东西来消化:
[v[i][j] for i in 1:length(v), j in 1:2]
hcat 解决方案也可以写成:
permutedims(reshape(reduce(hcat, v), (length(v[1]), length(v))));
它不应该挂你的 Julia (请确认 - 它对我有用)。
@Antonello:要了解为什么会这样,请考虑一个更简单的示例:
julia> string.(["a", "b", "c"], [1 2])
3×2 Matrix{String}:
"a1" "a2"
"b1" "b2"
"c1" "c2"
我正在广播一列 Vector ["a", "b", "c"] 和一个 1 行 Matrix [1 2] 。关键是 [1 2] 是一个 Matrix 。因此,它使广播同时扩展行(由向量强制)和列(由 Matrix 强制)。为了发生这种扩展, [1 2] 矩阵只有一行是至关重要的。现在更清楚了吗?

关于arrays - Julia:一种从数组数组中获取矩阵的快速而优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67574804/

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