【问题标题】:Convert a vector of tuples in an array in JULIA在 JULIA 中转换数组中的元组向量
【发布时间】:2021-04-17 11:18:22
【问题描述】:

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

using Statistics
a = randn((10, 100))
q = (0.05, 0.95)
conf_intervals = [quantile(a[i,:], q) for i in 1:10]

conf_intervals10-element Vector{Tuple{Float64, Float64}}

预期结果应该是10×2 Matrix{Float64}

我尝试用[conf_intervals...] 喷射conf_intervals,但矢量没有改变。

非常感谢

【问题讨论】:

  • 在 Julia 中,沿列切片比沿行切片效率更高。如果可以的话,你应该组织你的数据,这样你就可以使用a[:, i] 而不是a[i, :]
  • 谢谢!我忘了

标签: julia


【解决方案1】:

你可以使用理解:

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

【讨论】:

    【解决方案2】:

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

    如果需要转置结果,请在命令末尾添加撇号'结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-25
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2015-01-25
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多