Как преобразовать массив массива в матрицу?
предположим, я хочу применить векторную функцию 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