我对 Julia 很陌生,我正在尝试转换数组中的元组向量。 这是一个例子
using Statistics
a = randn((10, 100))
q = (0.05, 0.95)
conf_intervals = [quantile(a[i,:], q) for i in 1:10]
并且
conf_intervals
是 10-element Vector{Tuple{Float64, Float64}}
。
预期结果应该是
10×2 Matrix{Float64}
我尝试用
conf_intervals
泼溅 [conf_intervals...]
但矢量没有改变。
非常感谢
您可以使用理解式:
mat2x10 = [tup[k] for k in 1:2, tup in conf_intervals]
mat10x2 = [tup[k] for tup in conf_intervals, k in 1:2]
或者你可以重新解释相同的记忆。这更脆弱——它不适用于所有元组向量,例如
Any[(i, i^2/2) for i in 1:10]
。但对于Vector{Tuple{Float64, Float64}}
:
if VERSION >= v"1.6"
reinterpret(reshape, Float64, conf_intervals)
else
reshape(reinterpret(Float64, conf_intervals), 2, :)
end
mat2x10 == ans # true
编辑:在 Julia 1.9+ 上,您还可以使用
stack(conf_intervals)
。就像理解式 mat2x10
一样,这会创建一个新数组。
你需要使用
collect
将元组转换为向量,然后你可以组合它们:
julia> hcat(collect.(conf_intervals)...)
2×10 Matrix{Float64}:
-1.59757 -2.10057 -1.4437 -1.32868 -1.10686 -1.41256 -1.5696 -1.67288 -1.51947 -1.72257
1.24604 1.61692 1.77684 1.3599 1.90853 1.30831 1.10667 1.58356 1.56811 1.70685
如果需要转置结果,请添加撇号
'
end 命令的末尾