Добавление дополнительного измерения в массив - PullRequest
6 голосов
/ 03 октября 2019

Примечание: Этот вопрос / ответ скопирован из канала Джулии Слэк.

Если у меня произвольная Юлия Array, как я могу добавить другое измерение.

julia> a = [1, 2, 3, 4]
4-element Array{Int64,1}:
 1
 2
 3
 4

Желаемый результат будет, например:

julia> a[some_magic, :]
1×4 Array{Int64,2}:
 1  2  3  4

Или:

julia> a[:, some_magic]
4×1 Array{Int64,2}:
 1
 2
 3
 4

Ответы [ 2 ]

6 голосов
/ 03 октября 2019

Менее хитрая вещь, которую я обычно делаю для достижения этой цели:

julia> reshape(a, 1, :)
1×4 Array{Int64,2}:
 1  2  3  4

julia> reshape(a, :, 1)
4×1 Array{Int64,2}:
 1
 2
 3
 4

(кажется, что это также связано с меньшим набором текста)

Наконец, общий случай, требующий преобразования вектора в столбецМатрица может быть сделана:

julia> hcat(a)
4×1 Array{Int64,2}:
 1
 2
 3
 4

РЕДАКТИРОВАТЬ также, если вы добавляете конечные измерения, вы можете просто использовать ::

julia> a = [1,2,3,4]
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> a[:,:]
4×1 Array{Int64,2}:
 1
 2
 3
 4

julia> a[:,:,:]
4×1×1 Array{Int64,3}:
[:, :, 1] =
 1
 2
 3
 4
2 голосов
/ 03 октября 2019

Хитрость в том, что используйте [CartesianIndex()] для создания дополнительных осей:

julia> a[[CartesianIndex()], :]
1×4 Array{Int64,2}:
 1  2  3  4

И:

julia> a[:, [CartesianIndex()]]
4×1 Array{Int64,2}:
 1
 2
 3
 4

Если вы хотите приблизиться к синтаксису numpy, вы можете определить:

const newaxis = [CartesianIndex()]

И просто используйте newaxis.

...