Julia 如何将数组的数组转换为矩阵?
假设我想将向量值函数φ应用于向量x:Julia 如何将数组的数组转换为矩阵?,julia,Julia,假设我想将向量值函数φ应用于向量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元素数组{Array{Float64,1},1},即数组的数组。实际上,我希望y是一个矩阵。phi的实现是
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元素数组{Array{Float64,1},1}
,即数组的数组。实际上,我希望y
是一个矩阵。phi
的实现是否错误?或者我如何转换它
谢谢 将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]...)
正如您所指出的,您可以使用
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]
一般来说,您还可以将splat运算符
…
与hcat
一起使用:
X = [[1,2], [3, 4], [5,6]]
hcat(X...)
给出了一个2乘3的矩阵
1 3 5
2 4 6
类似于
hcat(X…)
的飞溅的替代方法是使用reduce
reduce(hcat, X)
因此,在您的情况下,这将起到作用
reduce(hcat, phi(x, 3))