假设我想将向量值函数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
的实施是否错误?或者我该如何转换它?
谢谢!
答案 0 :(得分:13)
如您所述,您可以使用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]
答案 1 :(得分:12)
将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]...)
答案 2 :(得分:3)
通常,您还可以将splat运算符...
与hcat
一起使用:
X = [[1,2], [3, 4], [5,6]]
hcat(X...)
给出2 x 3矩阵
1 3 5
2 4 6
答案 3 :(得分:0)
使用hcat(X...)
reduce
reduce(hcat, X)
所以,就您而言,这可以解决问题
reduce(hcat, phi(x, 3))