假設我有矩陣的陣列,命名爲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)]不起作用。 有人可以指出我在正確的方向。
假設我有矩陣的陣列,命名爲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)]不起作用。 有人可以指出我在正確的方向。
我認爲答案可能取決於你使用的是哪個版本的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}
。
在這兩個v0.4.5和V0.5(主),你可以簡單地做到以下幾點:
B = push!(copy(A), eye(3))