如何将数组转换为矩阵?
问题描述:
假设我想一个矢量值函数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}
,即数组的数组。其实我想y
是一个矩阵。 phi
的执行是否错误?或者我该如何转换它?
谢谢!
答
正如您所注意的,你可以使用hcat(x...)
连接一个数组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]...)