Скопируйте конструктор для создания одноэлементной матрицы векторов - PullRequest
0 голосов
/ 19 июня 2019

У Юлии следующие работы:

julia> A = Matrix{Vector{Float64}}([[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]] [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]])
5×2 Array{Array{Float64,1},2}:
[-3.0, 4.0]  [-3.0, 4.0]
[8.0]        [8.0]
[7.0, 8.0]   [7.0, 8.0]
[0.0, 9.0]   [0.0, 9.0]
[-1.0]       [-1.0]

Это создает Matrix{Vector{Float64}} с двумя одинаковыми столбцами.

Однако при использовании того же шаблона для создания того же объекта, но с одним столбцом возвращается ошибка:

julia> A = Matrix{Vector{Float64}}([[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]])

Как это возможно и как мне это исправить?

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

julia> A = hcat(Matrix{Vector{Float64}}(undef, 5, 0), [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]])
5×1 Array{Array{Float64,1},2}:
[-3.0, 4.0]
[8.0]
[7.0, 8.0]
[0.0, 9.0]
[-1.0]

1 Ответ

2 голосов
/ 19 июня 2019

Прежде всего, нет необходимости помещать объявление типа перед вашими массивами.Просто напишите

A = [[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]] [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]]

Это Array{Array{Float64,1},2}

Если вы сделаете то же самое со второй попыткой, вы получите нечто совершенно иное:

julia> [[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]]
1-element Array{Array{Array{Float64,1},1},1}

Это массив массива массива.Не то, с чего вы хотели начать.

К сожалению, исправить это не поможет.Причина в том, что вы не можете просто преобразовать вектор в матрицу, даже если они не вложены:

julia> Matrix{Float64}([1.0,2.0,3.0])
ERROR: MethodError: no method matching Array{Float64,2}(::Array{Float64,1})

Сообщение об ошибке совершенно ясно.

На самом деле довольно сложно создать Nx1матрицы, но вы можете, например, использовать reshape:

julia> reshape([[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]], :, 1)
5×1 Array{Array{Float64,1},2}:
 [-3.0, 4.0]
 [8.0]      
 [7.0, 8.0] 
 [0.0, 9.0] 
 [-1.0]

Имейте в виду, что вам очень часто не нужно передавать литерал массива в конструктор.Юля сама выясняет тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...