iHany
1
Hi,
I’d like to know how to access the rest except for given indices.
For example,
A = [1 2; 3 4] # 2 x 2
indices = findall(a -> a == 1, A) # indices = [CartesianIndex(1, 1)]
# _indices = [CartesianIndex(2, 1), CartesianIndex(1, 2), CartesianIndex(2, 2)]
Of course, not using findall(a -> a != 1, A)
. Instead, a function should look like except(indices, A) = _indices
.
iHany
2
In the 1-d case, this post makes sense, for example,
julia> A = [1, 2, 3, 4]
4-element Vector{Int64}:
1
2
3
4
julia> A = -A
4-element Vector{Int64}:
-1
-2
-3
-4
julia> indices = findall(a -> a == -1, A)
1-element Vector{Int64}:
1
julia> A[1:end .!= indices]
3-element Vector{Int64}:
-2
-3
-4
Actually, my demand is for 1-d array so my issue is resolved.
BTW, any ideas for n-d arrays?
sijo
3
One way is to work with logical indices, i.e. boolean flags:
A = [1 2; 3 4]
flags = A .== 1
A[.!flags]
Another way is using Not
from the InvertedIndices package:
using InvertedIndices
A = [1 2; 3 4]
indices = findall(a -> a == 1, A)
A[Not(indices)]
3 Likes