Конкатенация массивов изменчивых структур - PullRequest
0 голосов
/ 30 октября 2018

Допустим, у меня изменяемая структура:

mutable struct a
    x :: Float64
end

По какой-то причине я хочу объединить матрицу и вектор моего a:

b = Matrix{a}(undef, (0, 2))
c = [a(2.), a(3.)]
vcat(b, c)    # ERROR: ArgumentError: number of columns of each array 
# must match (got (2, 1))

Как я могу добавить свой вектор c в качестве новой строки внизу b?

Примечание: я понимаю, что c должен быть вектором строки, но оператор ' (т.е. c') нельзя применить к Vector{a}, что является частью проблемы.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Ваш c - это не вектор строки, а вектор столбца. Следующие работы:

b = Matrix{a}(undef, (0, 2))
c = [a(2.) a(3.)] # left out the comma here to generate a size (1,2) object
vcat(b, c)
0 голосов
/ 30 октября 2018

Есть несколько способов сделать это:

vcat(b, reshape(c, 1, 2))

или

vcat(b, permutedims(c))

или

vcat(b, [v for _ in 1:1, v in c])

В частности permutedims аналогично transpose, но не является рекурсивным (в отличие от transpose).

Вы также можете создать c в качестве матрицы, во-первых:

c = [a(2.) a(3.)]

, в этом случае vcat(b, c) просто работает.

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