Я новичок в Julia и пытаюсь преобразовать LinRange в Array для дальнейших вычислений. Например, у меня есть:
julia> x = LinRange(0, 1, 100)
С выходом:
100-element LinRange{Float64, Int64}: 0.0,0.010101,0.020202,0.030303,0.040404,0.0505051,0.0606061,0.0707071,0.0808081,0.0909091,0.10101,…,0.89899,0.909091,0.919192,0.929293,0.939394,0.949495,0.959596,0.969697,0.979798,0.989899,1.0
Затем я преобразую его в массив, используя:
julia> x = [x]
С выходом:
1-element Vector{LinRange{Float64, Int64}}: range(0.0, stop=1.0, length=100)
Но когда я пытаюсь получить к нему доступ как к обычному массиву
julia> x[1]
У меня есть весь LinRange в качестве вывода:
100-element LinRange{Float64, Int64}: 0.0,0.010101,0.020202,0.030303,0.040404,0.0505051,0.0606061,0.0707071,0.0808081,0.0909091,0.10101,…,0.89899,0.909091,0.919192,0.929293,0.939394,0.949495,0.959596,0.969697,0.979798,0.989899,1.0
И если я попытаюсь получить доступ ко второму элементу, я получаю эту ошибку:
julia> x[2]
ERROR: BoundsError: attempt to access 1-element Vector{LinRange{Float64, Int64}} at index [2]
Я понимаю, что надо "спуститься на уровень ниже", но как мне это сделать? Попытка, например, с x[1,1]
всегда выводит весь LinRange.
Использовать:
collect(x)
или
vcat(x)
или
[x;]
Однако вопрос в том, зачем вам Vector
. Если вам не нужно его мутировать, более эффективно работать с LinRange
.
[x]
создает «вектор векторов». Другими словами, вы сделали вектор с одним элементом, который является диапазоном, вы вообще не преобразовывали исходный диапазон. Переход «на один уровень вниз» будетx[1][1]
, а неx[1,1]
. Но вы уверены, что вам нужно преобразовать диапазон в первую очередь?