Как превратить 2D Array в одномерный массив в Julia - PullRequest
1 голос
/ 26 апреля 2020

У меня есть 2D Array: a = [ (1,2) (2,3) ; (3,4) (4,5)], который я хочу преобразовать в:

(1, 2)
(2, 3)
(3, 4)
(4, 5)
#1D Array

Как я могу сделать это в Джулии?

Ответы [ 2 ]

3 голосов
/ 26 апреля 2020

Я бы также прокомментировал другие подходы.

Первые два прохода Matrix по столбцам, а не по ряду:

julia> a[:]
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)

, который копирует данные и:

julia> vec(a)
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)

которая делится базовыми данными с a. Вот следствие:

julia> b = vec(a)
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)

julia> b[1] = (100, 100)
(100, 100)

julia> b
4-element Array{Tuple{Int64,Int64},1}:
 (100, 100)
 (3, 4)
 (2, 3)
 (4, 5)

julia> a
2×2 Array{Tuple{Int64,Int64},2}:
 (100, 100)  (2, 3)
 (3, 4)      (4, 5)

Вы можете использовать явное понимание, которое позволяет вам сделать это обоими способами:

julia> [a[i,j] for j in axes(a, 2) for i in axes(a, 1)]
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)

julia> [a[i,j] for i in axes(a, 1) for j in axes(a, 2)]
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (2, 3)
 (3, 4)
 (4, 5)

Наконец, вы можете использовать vcat, опять же в обоих направлениях:

julia> reduce(vcat, eachrow(a))
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (2, 3)
 (3, 4)
 (4, 5)

julia> reduce(vcat, eachcol(a))
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)
2 голосов
/ 26 апреля 2020

Джулия предоставляет простой интерфейс для преобразования 2D-массивов в один одномерный массив. Важно отметить, что существуют другие способы приблизиться к преобразованию двумерного массива в одномерный массив, но эти подходы могут не дать вам тот же порядок элементов в одномерном массиве.

См. Пример ниже:

julia> a = [ (1,2) (2,3) ; (3,4) (4,5)]
2×2 Array{Tuple{Int64,Int64},2}:
 (1, 2)  (2, 3)
 (3, 4)  (4, 5)

julia> reshape(a, 4, 1)
4×1 Array{Tuple{Int64,Int64},2}:
 (1, 2)
 (3, 4)
 (2, 3)
 (4, 5)
# Note the order here may not be what you want. 

julia> b = [permutedims(a)...]
4-element Array{Tuple{Int64,Int64},1}:
 (1, 2)
 (2, 3)
 (3, 4)
 (4, 5)

См. Документы Джулии, чтобы узнать больше о permutedims.

См. Документы Джулии, чтобы узнать больше о reshape.

...