在JULIA中转换数组中的元组向量

在JULIA中转换数组中的元组向量,julia,Julia,我对Julia很陌生,我正在尝试转换数组中的元组向量。 这里有一个例子 using Statistics a = randn((10, 100)) q = (0.05, 0.95) conf_intervals = [quantile(a[i,:], q) for i in 1:10] 而conf_interval是一个10元素向量{Tuple{Float64,Float64} 预期结果应为10×2矩阵{Float64} 我试着用[conf\u interval…]来设置conf\u inte

我对Julia很陌生,我正在尝试转换数组中的元组向量。 这里有一个例子

using Statistics
a = randn((10, 100))
q = (0.05, 0.95)
conf_intervals = [quantile(a[i,:], q) for i in 1:10]
conf_interval
是一个
10元素向量{Tuple{Float64,Float64}

预期结果应为
10×2矩阵{Float64}

我试着用
[conf\u interval…]
来设置
conf\u interval
,但是向量没有改变


非常感谢

您需要使用
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

您可以使用理解:

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]
。但是对于
向量{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中,沿列切片比沿行切片更有效。如果可以,您应该组织您的数据,这样您就可以执行
a[:,i]
而不是
a[i,:]
。谢谢!我忘了