У меня есть массив типа Array{Float64,2}
, но это массив из 1 столбца, и я не могу передать это в функцию, ожидающую массив с одним столбцом типа Array{Float64,1}
. Я не совсем понимаю, что означает 2
или как исправить мою проблему, и я не смог понять это, просмотрев любую документацию.Типы многомерных массивов Julia?
4
A
ответ
6
В Array{Float64,2}
, 2 - количество измерений в массиве. Так как вы говорите, что это «это массив из 1 колонки», вы, вероятно, есть то, что является 2-мерная или с одной строки или одного столбца, то есть один из
julia> c = rand(1,3)
1x3 Array{Float64,2}:
0.190944 0.928697 0.251519
julia> d = rand(3,1)
3x1 Array{Float64,2}:
0.0818493
0.0342291
0.58341
Чтобы превратить это в 1-мерного массива, можно разрезать массив вручную или использовать squeeze
, как вы предпочитаете:
julia> c[1,:]
3-element Array{Float64,1}:
0.190944
0.928697
0.251519
julia> squeeze(d,2)
3-element Array{Float64,1}:
0.0818493
0.0342291
0.58341
либо подход должен дать вам что-то типа Array{Float64,1}
.
Как было отмечено в комментарии, еще один подход заключается в использовании reshape
, например, (Используя различные случайные c
):
julia> reshape(c, length(c))
3-element Array{Float64,1}:
0.680653
0.0573147
0.607054
Это имеет преимущество - и недостаток - не заботясь о ли у вас массив формы 1xN или NX1.
randn - это именно то, что я использовал. Я не понимаю, почему он возвращает 2D-массив, хотя? – cerremony
Вас, возможно, путают аргументы, которые «randn» берет? Аргументы говорят вам, что * shape * вы хотите, а не как среднее и стандартное отклонение. – DSM
Итак, 'd = rand (3)' должен получить мне '3-элементный массив {Float64,1}'? Почему массив '3x1' отличается от вектора столбца« 3 элемента »? – cerremony