Как преобразовать массив массива в матрицу?
предположим, я хочу применить векторную функцию phi для вектора x:
phi(x, d) = [x.^i for i=0:d] # vector-valued function
x = rand(7) # vector
y = phi(x, 3) # should be matrix, but isn't
теперь y должно быть матрицей, но это 4-element Array{Array{Float64,1},1}, т. е. массив массивов. На самом деле, я хочу!--3--> для матрицы. Реализация phi не так? Или как его преобразовать?
спасибо!
3 ответов
как вы отметили, Вы можете объединить массив массивов x используя hcat(x...), но обычно лучше сначала создать матрицу. Два способа, которые вы можете сделать в этом случае:
-
через вещание:
phi(x, d) = x.^((0:d)')пока
xявляется вектором, он будет транслироваться против Матрицы строк(0:d)'.вы можете получить результат транспонирования, транспонируя
xвместо диапазона0:d. -
использование двумерного понимания массива:
phi(x, d) = [xi.^di for xi in x, di in 0:d]это будет работать до тех пор, пока
x- это повторяемое. Еслиxявляется массивом n-d, он будет интерпретироваться как если бы он был сплющен первым.вы можете транспонировать результат, переключая порядок переменных понимания:
phi(x, d) = [xi.^di for di in 0:d, xi in x]
преобразование phiвывод в матрицу можно сделать следующим образом:
y = hcat(phi(x, 3)...)
или, если вы предпочитаете, чтобы векторы были строками, требуется транспонирование:
y = vcat([x' for x in phi(x, 3)]...)
кроме того, вы можете преобразовать в матрицу в phi, определив его:
phi(x, d) = hcat([x.^i for i=0:d]...)
в более общем плане вы также можете использовать оператор splat ... С hcat:
X = [[1,2], [3, 4], [5,6]]
hcat(X...)
дает 2-на-3 матрицы
1 3 5
2 4 6