Конкатенация многомерных массивов в Юлии - PullRequest
0 голосов
/ 27 октября 2018

У меня есть массив многомерных массивов Array{Array{Float64,3},1}, и мне нужен один 4-мерный массив Array{Float64,4}.

Я прошел другие ответы

Но ни одна комбинация cat и reshape, кажется, не помогает.

Должен быть хороший идиоматический способ ... что это?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Ваш ответ правильный и общий.Однако обратите внимание, что при условии, что ваши внутренние массивы имеют одинаковый размер (а не просто одинаковую размерность), существует также следующий более быстрый способ:

julia> matrix = [rand(1,2,3) for _ in 1:4]; # some test data

julia> @btime a = cat($matrix..., dims=4); # your solution
  11.519 μs (80 allocations: 3.83 KiB)

julia> @btime b = reshape(collect(Iterators.flatten($matrix)), (1,2,3,4)); # much faster solution
  611.960 ns (55 allocations: 2.27 KiB)

julia> a == b
true
0 голосов
/ 27 октября 2018

Извините, что беспокою вас, я понял это вскоре после публикации

julia> typeof(matrix)
Array{Array{Float64,3},1}

julia> typeof(matrix[1])
Array{Float64,3}

julia> typeof(cat(matrix...,dims=4))
Array{Float64,4}
...