如何将数组转换为矩阵?

问题描述:

假设我想一个矢量值函数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,但通常最好是创建一个矩阵来代替。两种方法,你可以做,在这种情况下:

  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] 
    

转换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]...)