Джулия Массив с векторами разных размеров - PullRequest
3 голосов
/ 29 мая 2019

При создании массива векторов разных размеров (например, массивов) я генерирую сообщение об ошибке.

julia> A = [[1,2] [1,2,3] [1,4] [1] [1,5,6,7]]
ERROR: DimensionMismatch("vectors must have same lengths")
Stacktrace:
 [1] hcat(::Array{Int64,1}, ::Array{Int64,1}, ::Array{Int64,1}, ::Vararg{Array{Int64,1},N} where N) at .\array.jl:1524
 [2] top-level scope at none:0

Хотя, если я инициализирую массив и присваиваю векторам все в порядке ...

julia> A = Array{Any}(undef,5)
5-element Array{Any,1}:
 #undef
 #undef
 #undef
 #undef
 #undef

pseudo code> A[i] = [x,y...]
2-element Array{Int64,1}:
 1
 2

julia> A
5-element Array{Any,1}:
 [1, 2]
 [1, 2, 3]
 [1]
 [1, 5]
 [1, 2, 6, 4, 5]

Есть ли способ инициализировать массив массивами различного размера или Юлия настроена таким образом, чтобы предотвратить ошибки.

1 Ответ

5 голосов
/ 29 мая 2019

Синтаксис, разделенный пробелами, который вы используете для самого внешнего массива, специально предназначен для горизонтальной конкатенации матриц, поэтому ваш код пытается объединить все эти векторы в матрицу, что не работает, поскольку они имеют разную длину.Используйте запятые во внешнем массиве, например, во внутреннем, чтобы получить массив массивов:

julia> A = [[1,2], [1,2,3], [1,4], [1], [1,5,6,7]]
5-element Array{Array{Int64,1},1}:
 [1, 2]
 [1, 2, 3]
 [1, 4]
 [1]
 [1, 5, 6, 7]
...