在Julia中从数组中选择每个第n个元素

12
假设有一个数组a,我想要获取每隔一个元素。使用numpy,我会使用a[::2]。在Julia中,我该如何做到相同的效果?
1个回答

17

在Julia中,选择元素的方式类似于Python,使用start:stop[:step]。但是在Julia中,语法为start:[step:]stop,因此如果给出了所有三个参数,则stepstop的含义相反。有关:colon的详细信息,请参见docs

例如:

julia> a = randn(20);

julia> a[1:2:end]
10-element Vector{Float64}:
...

julia> a[begin:2:end] # equivalent for default one-based indexing
10-element Vector{Float64}:
...

julia> a[1:5:end]
4-element Vector{Float64}:
 ...

但是在Julia中忽略边界不会像Python一样奏效,因为:在Julia中有多种含义。

julia> a[::2]
ERROR: syntax: invalid "::" syntax

julia> a[:2:]
ERROR: syntax: missing last argument in ":(2):" range expression

julia> a[2::]
ERROR: syntax: unexpected "]"

julia> a[:2:end] # `:2` is a `Symbol` and evaluates to `2`, so start from 2nd element
19-element Vector{Float64}:
  ...

应该提到,这与MATLAB的表示法相同。 - Chris Rackauckas
我认为:/冒号文档的链接已经移至此处:https://docs.julialang.org/en/v1/base/math/#Base.:: - Olsgaard
已在答案中修复。 - Fred Schoen
这个答案可能也应该强调 begin - Oscar Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接