如何将数组数组转换为矩阵?

时间:2014-10-31 11:17:16

标签: julia

假设我想将向量值函数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的实施是否错误?或者我该如何转换它?

谢谢!

4 个答案:

答案 0 :(得分:13)

如您所述,您可以使用x连接数组hcat(x...),但通常最好先创建一个矩阵。在这种情况下,您可以采用两种方式:

  1. 使用广播:

    phi(x, d) = x.^((0:d)')
    

    只要x是一个向量,它就会针对行矩阵(0:d)'进行广播。

    您可以通过转置x代替范围0:d来获得转置结果。

  2. 使用二维数组理解:

    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))
相关问题