Indeks Array tanpa Elemen

Oct 10 2020

Saya memiliki vektor

a = Vector(1:4)

[1, 2, 3, 4]

dan saya ingin mengindeksnya ke semua elemen kecuali yang ketiga untuk mendapatkan

[1, 2, 4]

di RAnda bisa melakukan a[-3]. Apa yang kamu lakukan Julia?

(Akhirnya saya ingin mengulang semua elemen dan membandingkannya masing-masing dengan yang lain - mungkin ini relevan.)

Jawaban

6 PrzemyslawSzufel Oct 10 2020 at 13:23

Sayangnya sintaks Julia akan lebih bertele-tele daripada sintaks R:

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

Pilihan lainnya adalah dengan mengubah:

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

Jika data Anda dalam DataFramedaripada Anda bisa mendapatkan sintaks yang lebih baik:

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

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

dan ketika DataFramesdiimpor Notjuga akan bekerja dengan Vector:

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

Kasus penggunaan ini umum terjadi dan dicakup oleh paket InvertedIndices.jl . Jika Anda menginstalnya maka Anda dapat menjalankan:

julia> using InvertedIndices

julia> a = 1:4
1:4

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

Juga beberapa paket (seperti DataFrames.jl) secara otomatis memuat paket ini (jadi jika Anda misalnya menggunakan DataFrames.jl Anda tidak perlu menginstal dan memuat InvertedIndices.jl secara terpisah).

BenoitPasquier Oct 14 2020 at 04:40

saya belum melihat

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

atau

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

disebutkan, tapi mungkin ada alasan bagus?


EDIT : Saya salah, yang pertama sebenarnya sama dengan jawaban pertama Bogumil kecuali !==sudah diganti dengan≠