提取tuple元组元素

求助,本人是julia小白,想请教大佬们一个问题,如何提取tuple元组矩阵(如下)中的某一列数据?网上或中文文档看了很久没找到解决方法,感谢回答!

17-element Vector{Tuple{Float64, Float64, Float64}}:
(602543.7556950828, 3.726594856880262e-5, 0.0028109960834675025)
(738001.7297537203, 3.790573356791245e-5, 0.0023167619030033866)
(895280.3709373648, 3.8597553800332364e-5, 0.001924015338852268)
(1.076480027115302e6, 3.934841155761742e-5, 0.0016087473198658706)
(1.283753333972839e6, 4.016672891845008e-5, 0.0013532749232966763)
(1.5192998812914423e6, 4.10627519909425e-5, 0.0011444184862182628)
(1.785361693800485e6, 4.204910949342175e-5, 0.0009722436701298937)
(2.0842194486802462e6, 4.3141602391623046e-5, 0.0008291818635834181)
(2.4181894084559865e6, 4.4360349960738274e-5, 0.0007094071911383279)
(2.7896210310972054e6, 4.5731505381329104e-5, 0.0006083896418053572)
(3.2008952149241334e6, 4.728992021667748e-5, 0.0005225702233916614)
(3.654423134351435e6, 4.9083471544014106e-5, 0.0004491210310122791)
(4.152645621880484e6, 5.1180489410537746e-5, 0.00038576383224314084)
(4.698033046061507e6, 5.368344021550498e-5, 0.00033062670329713997)
(5.293085800414285e6, 5.675661697956508e-5, 0.0002821188113835604)
(5.940334797530339e6, 6.069007449796829e-5, 0.00023879258255953898)
(6.642343003323888e6, 6.608037704807668e-5, 0.0001991064058276379)

x=[(602543.7556950828, 3.726594856880262e-5, 0.0028109960834675025)
       (738001.7297537203, 3.790573356791245e-5, 0.0023167619030033866)
       (895280.3709373648, 3.8597553800332364e-5, 0.001924015338852268)
       (1.076480027115302e6, 3.934841155761742e-5, 0.0016087473198658706)
       (1.283753333972839e6, 4.016672891845008e-5, 0.0013532749232966763)
       (1.5192998812914423e6, 4.10627519909425e-5, 0.0011444184862182628)
       (1.785361693800485e6, 4.204910949342175e-5, 0.0009722436701298937)
       (2.0842194486802462e6, 4.3141602391623046e-5, 0.0008291818635834181)
       (2.4181894084559865e6, 4.4360349960738274e-5, 0.0007094071911383279)
       (2.7896210310972054e6, 4.5731505381329104e-5, 0.0006083896418053572)
       (3.2008952149241334e6, 4.728992021667748e-5, 0.0005225702233916614)
       (3.654423134351435e6, 4.9083471544014106e-5, 0.0004491210310122791)
       (4.152645621880484e6, 5.1180489410537746e-5, 0.00038576383224314084)
       (4.698033046061507e6, 5.368344021550498e-5, 0.00033062670329713997)
       (5.293085800414285e6, 5.675661697956508e-5, 0.0002821188113835604)
       (5.940334797530339e6, 6.069007449796829e-5, 0.00023879258255953898)
       (6.642343003323888e6, 6.608037704807668e-5, 0.0001991064058276379)]
julia> [ a[1] for a in x]
17-element Vector{Float64}:
 602543.7556950828
 738001.7297537203
 895280.3709373648
      1.076480027115302e6
      1.283753333972839e6
      1.5192998812914423e6
      1.785361693800485e6
      2.0842194486802462e6
      2.4181894084559865e6
      2.7896210310972054e6
      3.2008952149241334e6
      3.654423134351435e6
      4.152645621880484e6
      4.698033046061507e6
      5.293085800414285e6
      5.940334797530339e6
      6.642343003323888e6

这种时候其实你应该用 matrix 吧

嗯,明白了,感谢您!

或者用 getindex 向量化

triples = [(rand(), rand(), rand()) for _ in 1:10]
col2 = getindex.(triples, 2) # 取第二列
col1to2 = getindex.(triples, Ref(1:2)) # 取 1-2 列
col3 = last.(triples) # 取最后一列
col1 = first.(triples) # 取第一列
1 个赞

没理解Ref的用法

2 个赞

Ref 把对象处理成标量,用列表生成式理解的话

f.(data, para) <=> [f(d, p) for (d, p) in zip(data, para)]
f.(data, Ref(para)) <=> [f(d, para), for d in data)]
1 个赞