#julia
#julia
Вопрос:
У меня есть вектор и матрица (массив {T,1} и массив {T, 2}) в моем коде Julia, и я хотел бы добавить их так, чтобы вектор стал новой строкой в матрице (должен быть первой строкой). Я пробовал несколько методов ( cat
и т.д.), Но продолжаю получать ошибки, которые, как я полагаю, связаны с разной формой данных. Смотрите пример ниже.
julia> v = Vector([1, 2, 3])
3-element Array{Int64,1}:
1
2
3
julia> m = Matrix([4 5 6; 7 8 9])
2×3 Array{Int64,2}:
4 5 6
7 8 9
julia> cat(v,m,dims=(1,2))
5×4 Array{Int64,2}:
1 0 0 0
2 0 0 0
3 0 0 0
0 4 5 6
0 7 8 9
Чего я на самом деле хочу, так это
1 2 3
4 5 6
7 8 9
Я понимаю, что могу заставить это работать, transpose(v)
но я надеялся избежать дополнительных вызовов.
Спасибо!
Комментарии:
1. Насколько я знаю, это невозможно (Джулия здесь строга и обрабатывает обычный вектор как вектор столбца). Обратите внимание, что
transpose
это эффективно, поскольку оно не выделяет новый вектор.2. Спасибо, возможно, ответ заключается в том, чтобы просто использовать
transpose
. Я не понимал, что это не создает новый вектор.3. Также просто
'
должно быть достаточно хорошо в большинстве случаев (это сопряженная операция, но если вы не работаете с комплексными числами, она должна быть удобной в использовании и короче).4. Нет необходимости использовать
Vector
Matrix
конструкторы and .[1,2,3]
уже является вектором, а также дляm
. Вызовы конструктора полностью избыточны, а в худшем случае просто выполняют дополнительную работу.
Ответ №1:
Пока вы можете изменить конструкцию v на массив 1 x 3, вы можете избежать транспонирования:
julia> v = [1 2 3]
1×3 Array{Int64,2}:
1 2 3
julia> m = [4 5 6; 7 8 9]
2×3 Array{Int64,2}:
4 5 6
7 8 9
julia> vcat(v, m)
3×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
Я думаю, что просто выполняю транспонирование
julia> v2 = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> vcat(v2', m)
3×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
хотя это почти так же эффективно.
Комментарии:
1. Спасибо. Тем не менее, я просто использовал простой пример для вопроса. В реальном коде у меня нет этой опции.