Julia 从元组中为数组中的每一行选择元素

Mat*_*ews 5 arrays indexing tuples julia

我知道在 Julia 中必须有一种聪明的方法来做到这一点,但我被难住了。我有一个一维元组数组,我想从数组的每一行中提取第三个元素。这是我正在使用的示例:

julia> experArr 20-element Array{(Any,Any,Any),1}:
 (4000,0.97613,1.6e6) 
 (2000,0.97613,800000.0)
 (8000,0.97613,3.2e6) 
 (1000,0.97613,400000.0)
 ...
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是做这样的事情:

julia> experArr[:][3]
Run Code Online (Sandbox Code Playgroud)

但这会返回以下内容:

julia> experArr[:][3] 
(8000,0.97613,3.2e6)
Run Code Online (Sandbox Code Playgroud)

我想要它返回的是这样的:

20-element Array{Any,1}:
1.6e6
800000.0
3.2e6
400000.0
...
Run Code Online (Sandbox Code Playgroud)

我尝试了其他几种索引排列,但我只返回一个元素。我觉得有一个正确的方法可以做到这一点,但我只是想念

ivi*_*hup 7

本质上与 Stefan 的答案相同,但更简洁一点,您可以getfield通过数组进行广播:

getfield.(experArr, 3)
Run Code Online (Sandbox Code Playgroud)


Ste*_*ski 4

experArray[:]只是原始数组的副本,因此这实际上是一个无操作。最简单的方法是理解:

[ x[3] for x in experArr ]
Run Code Online (Sandbox Code Playgroud)

你也可以这样做map

map(x->x[3], experArr)
Run Code Online (Sandbox Code Playgroud)

目前,理解版本可能会更快并且具有更好的类型行为。