2016-05-17 147 views
2

假設我有矩陣的陣列,命名爲A.朱莉婭:追加矩陣的陣列與矩陣

Array{Array{Float64,2},1}, 

如果創建另一矩陣,眼(3)例如,我可以將其追加到一端與推!(A,眼睛(3))。然而,這會修改我不想要的A。理想情況下我正在尋找的是一些語法糖等

B=[A;eye(3)] 

其中B是陣列類型{陣列{Float64,2},1},B [結束]是眼(3)和長度(B)是長度(A)+1。

但是,此語法B = [A; eye(3)]不起作用。 有人可以指出我在正確的方向。

回答

2

我認爲答案可能取決於你使用的是哪個版本的Julia。

對於v0.4.x,如您所述,方括號連接失敗。這是因爲語法的字面意思是:創建一個新的向量,其中第一個元素是A,第二個元素是eye(3)。由於A的類型爲Array{Array{Float64,2},1},但eye(3)的類型爲Array{Float64, 2},因此操作失敗。

爲了正確連接,您需要確保連接相同類型的對象。最簡單的方法是將eye(3)轉換爲Array{Array{Float64,2},1}類型,然後執行拼接。有幾種方法可以做到這一點。我個人通常只是使用理解,例如

B = [A ; Matrix{Float64}[ eye(3) for n = 1:1 ]] 

注意B仍然指向A,因此,例如,B[1][1,1] = 0.0還將調整原A的內容。如果你想B成爲一個真正獨立的副本,那麼您需要:

B = [deepcopy(A) ; Matrix{Float64}[ eye(3) for n = 1:1 ]] 

我認爲是實現這一切的主分支(V0.5)一個更合適的方法,但我仍然在v0.4.x自己。我認爲在v0.5,你可以做[eye(3)]得到Array{Array{Float64,2},1}

6

在這兩個v0.4.5和V0.5(主),你可以簡單地做到以下幾點:

B = push!(copy(A), eye(3))