2014-10-31 228 views
11

假設我想一個矢量值函數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的執行是否錯誤?或者我該如何轉換它?

謝謝!

回答

9

正如您所注意的,你可以使用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] 
    
8

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