【问题标题】:How to convert an array of array into a matrix?如何将数组数组转换为矩阵?
【发布时间】:2019-07-19 04:57:21
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: julia


    【解决方案1】:

    如您所述,您可以使用 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]
      

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        更一般地,您还可以将 splat 运算符 ...hcat 一起使用:

        X = [[1,2], [3, 4], [5,6]]
        hcat(X...)
        

        给出一个 2×3 矩阵

        1  3  5
        2  4  6
        

        【讨论】:

          【解决方案4】:

          hcat(X...) 这样喷溅的替代方法是使用reduce

          reduce(hcat, X)
          

          所以,在你的情况下,这可以解决问题

          reduce(hcat, phi(x, 3))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多