在Julia中按索引过滤数组最自然的方法是什么?最简单的例子是省去第k个元素:
A = [1,2,3,4,5,6,7,8]
k = 4
[getindex(A, i) for i = 1:8 if i != k]
上述工作有效,但与A[-k]
中提供的简单R
相比似乎比较冗长。什么是执行这项简单任务最干净的方法?
答案 0 :(得分:10)
不像R等同,但相当可读:
A[1:end .!= k]
更重要的是,这也可用于多维数组,例如,
B[ 1:end .!= i, 1:end .!= j, 1:end .!= k ]
答案 1 :(得分:7)
答案 2 :(得分:3)
我认为这个问题值得更新。现在有一个用于该目的的软件包:
答案 3 :(得分:3)
最简单的方法是使用“Not”。
julia> 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
答案 4 :(得分:0)
您可以将filter
与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
如果您对数组的每个维度应用过滤器,则需要将eachindex(A)
替换为indices(A,n)
,其中n
是适当的维度,例如
B[ filter(x->!(x in [5,6])&&x>2, indices(B,1)), filter(x->x>3, indices(B,2)) ]