2015-03-21 14 views
7

birisi basit terimlerle Julia'nın v0.4 fonksiyonu arasındaki fark içinde açıklayabilir misiniz dilim fonksiyonu vs alt:Julia dil:

sub ve slice (ve belki slicedim)

Bazı basit bir örnek ölçüde olacağını appriciated. Çok teşekkürler

cevap

10

fark sub sık sık korur iken slice, bir skaler (non-vektör) ile "dilimlenmiş" tüm boyutları düşer olmasıdır. Örneğin:

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) 

bir istisna vardır:

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,) 

: a vektörü ile endeksli en geç boyut olduğunu, yani onlar boyutları "sondaki" olan eğer bir sayısal alan ile endeksli boyutları düşer sub Eğer bir dizi ile slice, o zaman sub gibi davranış olsun:

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) 

Önemli olan dizinin uzunluğu değil, türü: Skaler olmayan dizinlenmiş herhangi bir boyut korunur.

+2

** Bir aralıkla dilimlenirseniz, alt ** gibi davranışlar elde edersiniz. Dilim ile yapılamayan 'sub' ile herhangi bir ek işlevsellik var mı? Ya da her koşulda alt kelimeyi değiştirebilir. – user3426681