getindex(::ComponentVector, ::Symbol) returns a copy, while getproperty returns a view
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia riproducendo gli esempi Julia con ComponentArrays v0.15.32, confrontando getindex(u, :a) con getproperty(u, :a). Individua quindi le implementazioni di getindex e getproperty e aggiungi o aggiorna i test che mostrano che l indicizzazione tramite simbolo restituisce una view le cui mutazioni influiscono sul vettore piatto originale.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Updating fields with vectors contained inside them returns a copy of the vector rather than a view into the vector. In addition to preventing the original flat vector from being modified, this allocates a new array.
julia> u = ComponentArray(a = [0.0, 0.0], b = [0.0, 0.0])
julia> getindex(u, :a)
2-element Vector{Float64}: #notice it's a plain vector and not a view
0.0
0.0
julia> getproperty(u, :a)
2-element view(::Vector{Float64}, 1:2) with eltype Float64:
0.0
0.0
julia> u.a.= 0.0
julia> u[:a][1] += 1.0
julia> u.a[1]
0.0 (should be 1.0)
julia> u.a.= 0.0
julia> u.a[1] += 1.0
julia> u.a[1]
1.0 (works fine)
Why do we need this?
This is related to issue: #338
I'm going to post an additional issue about this, but if we ever had something like this:
julia> u = ComponentArray(mass_fractions = (methanol = zeros(n_cells), water = zeros(n_cells)))
and we wanted to loop through it, doing something like:
for cell_id in 1:n_cells
for species_name in keys(u.mass_fractions)
u.mass_fractions[species_name][cell_id] += 1.0
end
end
the original array would not be modified.
The for species_name in keys(u.mass_fractions) is a terrible pattern for performance which you can see here:
https://gist.github.com/Jolt8/3b7cf79326f9ffbee6626a0d39e6e428
Julia Version 1.12.0
ComponentArrays v0.15.32
- Lingua principale
- Julia
- Stelle
- 378
- Fork
- 43
- Merge medio
- 6h 49m
- PR unite (30g)
- 3
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di SciML/ComponentArrays.jl
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
SciML/ComponentArrays.jl#344 ·
-
Looping over nested fieldsAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
SciML/ComponentArrays.jl#338 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
SciML/ComponentArrays.jl#328 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
SciML/ComponentArrays.jl#321 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
SciML/ComponentArrays.jl#315 ·
Tutte le issue di SciML/ComponentArrays.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
MagneticResonanceImaging/MRIReco.jl#366 ·
I maintainer di solito rispondono entro 3 giorni
-
`AdamW` gives `NaN` for zero-gradient entries of `Float16` parameters (epsilon underflows to 0)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
FluxML/Optimisers.jl#253 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaGraphs/GraphNeuralNetworks.jl#736 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno