Matriz de índice sem elementos

Oct 10 2020

Eu tenho um vetor

a = Vector(1:4)

[1, 2, 3, 4]

e quero indexá-lo a todos os elementos, exceto o terceiro, para obter

[1, 2, 4]

em Rvocê poderia fazer a[-3]. O que você faz Julia?

(Eventualmente, quero percorrer todos os elementos e comparar cada um deles com o resto - talvez isso seja relevante.)

Respostas

6 PrzemyslawSzufel Oct 10 2020 at 13:23

A sintaxe de Julia será, infelizmente, mais detalhada do que a de R:

julia> a[1:end .!== 3]
3-element Array{Int64,1}:
 1
 2
 4

Outra opção é transformar um:

julia> deleteat!(a,3)
3-element Array{Int64,1}:
 1
 2
 4

Se seus dados estiverem dentro de um, DataFramevocê pode obter uma sintaxe mais agradável:

julia> df = DataFrame(a=1:4);

julia> df[Not(3),:]
3×1 DataFrame
│ Row │ a     │
│     │ Int64 │
├─────┼───────┤
│ 1   │ 1     │
│ 2   │ 2     │
│ 3   │ 4     │

e quando DataFramesé importado Nottambém funcionará com Vector:

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4
7 BogumiłKamiński Oct 10 2020 at 13:26

Este caso de uso é comum e é coberto pelo pacote InvertedIndices.jl . Se você instalá-lo, poderá executar:

julia> using InvertedIndices

julia> a = 1:4
1:4

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4

Além disso, alguns pacotes (como DataFrames.jl) carregam automaticamente este pacote (então se você, por exemplo, usar DataFrames.jl, você não precisa instalar e carregar InvertedIndices.jl separadamente).

BenoitPasquier Oct 14 2020 at 04:40

Eu não vi

julia> a[1:end .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

ou

julia> a[eachindex(a) .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

mencionado, mas talvez haja um bom motivo?


EDIT : Eu estava errado, a primeira é na verdade igual à primeira resposta de Bogumil, exceto !==que foi substituída por≠