2016-04-10 3 views
4

У меня есть массив типа Array{Float64,2}, но это массив из 1 столбца, и я не могу передать это в функцию, ожидающую массив с одним столбцом типа Array{Float64,1}. Я не совсем понимаю, что означает 2 или как исправить мою проблему, и я не смог понять это, просмотрев любую документацию.Типы многомерных массивов Julia?

ответ

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.

+0

randn - это именно то, что я использовал. Я не понимаю, почему он возвращает 2D-массив, хотя? – cerremony

+1

Вас, возможно, путают аргументы, которые «randn» берет? Аргументы говорят вам, что * shape * вы хотите, а не как среднее и стандартное отклонение. – DSM

+0

Итак, 'd = rand (3)' должен получить мне '3-элементный массив {Float64,1}'? Почему массив '3x1' отличается от вектора столбца« 3 элемента »? – cerremony