Index-Array ohne Elemente

Oct 10 2020

Ich habe einen Vektor

a = Vector(1:4)

[1, 2, 3, 4]

und ich möchte es auf alle Elemente indizieren, außer auf das dritte

[1, 2, 4]

in Rdu könntest tun a[-3]. Was machst du in Julia?

(Schließlich möchte ich alle Elemente durchlaufen und jedes mit dem Rest vergleichen - vielleicht ist dies relevant.)

Antworten

6 PrzemyslawSzufel Oct 10 2020 at 13:23

Die Julia-Syntax ist leider ausführlicher als die von R:

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

Eine andere Möglichkeit besteht darin, a zu mutieren:

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

Wenn Ihre Daten innerhalb eines DataFrameals liegen, können Sie eine schönere Syntax erhalten:

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

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

und wenn DataFramesimportiert Notwird, funktioniert auch mit Vector:

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

Dieser Anwendungsfall ist häufig und wird vom Paket InvertedIndices.jl abgedeckt . Wenn Sie es installieren, können Sie Folgendes ausführen:

julia> using InvertedIndices

julia> a = 1:4
1:4

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

Auch einige Pakete (wie DataFrames.jl) laden dieses Paket automatisch (wenn Sie also beispielsweise DataFrames.jl verwenden, müssen Sie InvertedIndices.jl nicht separat installieren und laden).

BenoitPasquier Oct 14 2020 at 04:40

Ich habe nicht gesehen

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

oder

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

erwähnt, aber vielleicht gibt es einen guten Grund?


EDIT : Ich habe mich geirrt, die erste ist tatsächlich die gleiche wie Bogumils erste Antwort, außer dass !==sie durch ersetzt wurde≠