在Julia中,通过索引过滤数组的最自然的方法是什么?最简单的例子是省略第k个元素:
什么是在Julia中通过索引过滤数组的最自然方式?最简单的例子便是通过省略第k个元素实现:
A = [1,2,3,4,5,6,7,8]
k = 4
[getindex(A, i) for i = 1:8 if i != k]
上述方法可行,但与 R 中简单的 A[-k]
相比显得冗长。执行这个简单任务最简洁的方式是什么?虽然不像 R 的等价语句那么简洁,但相当易读:
A[1:end .!= k]
更重要的是,这也可以用于多维数组中,例如:
B[ 1:end .!= i, 1:end .!= j, 1:end .!= k ]
findin
或退回到列表推导等方法... - Tasos Papastylianoujulia> using InvertedIndices # use ] add InvertedIndices if not installed
julia> A = [1,2,3,4,5,6,7,8]
julia> k = 4;
julia> A[Not(k)]
7-element Array{Int64,1}:
1
2
3
5
6
7
8
deleteat!
相比如何? - Vass请看deleteat!
的示例:
julia> A = [1,2,3,4,5,6,7,8]; k = 4;
julia> deleteat!(A, k)
7-element Array{Int64,1}:
1
2
3
5
6
7
8
julia> A = [1,2,3,4,5,6,7,8]; k = 2:2:8;
julia> deleteat!(A, k)
4-element Array{Int64,1}:
1
3
5
7
deleteat!
。 - Michael K. Borregaardfilter
与eachindex
结合使用。julia> A = collect(1:8); println(A)
[1, 2, 3, 4, 5, 6, 7, 8]
julia> A[ filter(x->!(x in [5,6]) && x>2, eachindex(A)) ]
4-element Array{Int64,1}:
3
4
7
8
如果你想对数组的每个维度应用一个过滤器,那么你需要使用 indices(A,n)
替换 eachindex(A)
,其中 n
是相应的维度,例如:
B[ filter(x->!(x in [5,6])&&x>2, indices(B,1)), filter(x->x>3, indices(B,2)) ]
A[-k]
语法,这个问题可能与此相关:https://dev59.com/QZ_ha4cB1Zd3GeqPxmCe - Gnimuc[A[i] for i = 1:8 if i ∉ k]
(其中∉运算符可以通过键入\notin
并按TAB键获得)。 - Tasos Papastylianou