jemand in einfachen Worten die Differenz zwischen Julias v0.4 Funktion erklären konnte:Julia Sprache: sub vs. Scheibe Funktion
sub und slice (und vielleicht slicedim)
Einige einfaches Beispiel wäre stark geschätzt. Vielen Dank
jemand in einfachen Worten die Differenz zwischen Julias v0.4 Funktion erklären konnte:Julia Sprache: sub vs. Scheibe Funktion
sub und slice (und vielleicht slicedim)
Einige einfaches Beispiel wäre stark geschätzt. Vielen Dank
Der Unterschied ist, dass slice
alle Dimensionen "in Scheiben geschnitten" mit einem Skalar (Nicht-Vektor), während sub
oft behält sie. Zum Beispiel:
julia> A = rand(3,3)
3x3 Array{Float64,2}:
0.403464 0.229403 0.924686
0.953741 0.175086 0.49139
0.0290678 0.705564 0.567355
julia> a = slice(A, 2, :) # this will be 1-dimensional
3-element SubArray{Float64,1,Array{Float64,2},(Int64,Colon),2}:
0.953741
0.175086
0.49139
julia> b = sub(A, 2, :) # this will be 2-dimensional
1x3 SubArray{Float64,2,Array{Float64,2},(UnitRange{Int64},Colon),2}:
0.953741 0.175086 0.49139
julia> size(a)
(3,)
julia> size(b)
(1,3)
Es gibt eine Ausnahme: sub
mit einem Skalar indiziert Dimensionen fällt wenn sie „trailing“ Dimensionen werden, was bedeutet, es gibt keine späteren Dimensionen mit einem Vektor indiziert sind:
julia> a = slice(A, :, 2)
3-element SubArray{Float64,1,Array{Float64,2},(Colon,Int64),2}:
0.229403
0.175086
0.705564
julia> b = sub(A, :, 2)
3-element SubArray{Float64,1,Array{Float64,2},(Colon,Int64),2}:
0.229403
0.175086
0.705564
julia> size(a)
(3,)
julia> size(b)
(3,)
Wenn Sie slice
mit einem Bereich, dann bekommen Sie Verhalten wie sub
:
julia> a = slice(A, 2:2, :)
1x3 SubArray{Float64,2,Array{Float64,2},(UnitRange{Int64},Colon),1}:
0.953741 0.175086 0.49139
julia> size(a)
(1,3)
Es kommt nicht auf die Länge des Index an, sondern auf den Typ: Alle mit einem Nicht-Skalar indizierten Dimensionen bleiben erhalten.
** Wenn Sie mit einem Bereich schneiden, dann erhalten Sie Verhalten wie sub **. Gibt es zusätzliche Funktionalität mit 'sub', die nicht mit' slice' gemacht werden kann? Oder könnte 'slice'' sub' in jedem Fall ersetzen. – user3426681