2014-05-30 2 views
2

У меня есть мульти двумерный массив в Джулии:Получение 1D подмножествах многомерных массивов в Джулии

julia> ac.value 
3x100x3 Array{Float64,3}: 
[:, :, 1] = 
0.29238 0.0751815 0.00843636 … -0.0143826 0.0403283 0.0225896 
0.263146 0.080687 0.000462262  -0.00635778 0.0307563 0.0379104 
0.992458 0.986423 0.980587   0.561173 0.55516 0.549105 

[:, :, 2] = 
0.362155 0.13406 0.0741124 … 0.0231614 0.0156455 0.0121797 
0.325581 0.11181 0.0447847  0.0098042 0.0193873 0.0146943 
0.914888 0.852297 0.796608  -0.0500265 -0.0551787 -0.0520171 

[:, :, 3] = 
0.269976 0.108082 0.0441809 … 0.0249861 0.0128778 0.0168318 
0.218475 0.0997567 0.0532782  0.0243412 0.00742072 0.00978782 
0.96878 0.947455 0.931407  0.0796884 0.0710757 0.0630705 

Когда я смотрю на

julia> ac.value[1,:,1] 
1x100 Array{Float64,2}: 
0.29238 0.0751815 0.00843636 … -0.0143826 0.0403283 0.0225896 

я получаю 2 одномерный массив, но когда я смотрю на

julia> ac.value[:,1,1] 
3-element Array{Float64,1}: 
0.29238 
0.263146 
0.992458 

Я получаю одномерный массив. Почему это так и что я могу сделать, чтобы в первом случае я получил одномерный массив?

ответ

3

Быстрое взломать 1D массивы - добавить [:] в ссылки на ваш массив. НАПРИМЕР,

julia> A = rand(Int,3,3,3) 
3x3x3 Array{Int32,3}: 
[:, :, 1] = 
    1059011904 -1092196516 -2083742447 
-1232110963  46419394 599245389 
    747779547 1800837260 -460798437 

[:, :, 2] = 
    -154984919 1641929284 1335793910 
-1575337246 1100743707 333491108 
    231729201 1543773782 338937245 

[:, :, 3] = 
-1812252712 374672056 -156561770 
    317145782 -1941995702 747015018 
    127966143 -102265949 1068453724 

julia> A[:,1,1] 
3-element Array{Int32,1}: 
    1059011904 
-1232110963 
    747779547 

julia> A[:,1,1][:] 
3-element Array{Int32,1}: 
    1059011904 
-1232110963 
    747779547 

julia> A[1,:,1] 
1x3 Array{Int32,2}: 
1059011904 -1092196516 -2083742447 

julia> A[1,:,1][:] 
3-element Array{Int32,1}: 
    1059011904 
-1092196516 
-2083742447 

julia> A[1,1,:] 
1x1x3 Array{Int32,3}: 
[:, :, 1] = 
1059011904 

[:, :, 2] = 
-154984919 

[:, :, 3] = 
-1812252712 

julia> A[1,1,:][:] 
3-element Array{Int32,1}: 
    1059011904 
    -154984919 
-1812252712 

Вы также можете быть заинтересованы в ArrayViews package, которые могут быть более эффективными в зависимости от того, что вы хотите реализовать.

+1

Можете ли вы объяснить, почему 'A [:, 1,1]', 'A [1,:, 1]' и 'A [1,1,:]' имеют разный размер, а также как '[: ] 'работает? – eccstartup

+1

@eccstartup: см. Эту дискуссию [julia-users] (https://groups.google.com/d/msg/julia-users/L3vPeZ7kews/ZBjoUzPsDPcJ) и все ответы и ссылки. – rickhg12hs

 Смежные вопросы

  • Нет связанных вопросов^_^