Добавление вектора в виде строки в матрицу в Julia

#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. Спасибо. Тем не менее, я просто использовал простой пример для вопроса. В реальном коде у меня нет этой опции.