朱莉娅:用矩阵附加矩阵数组

时间:2016-05-17 00:49:23

标签: arrays julia

假设我有一个矩阵数组,名为A.

Sub DoMyJob()

Dim IDump As Worksheet
Dim f As Range
Dim g As Range
Dim CapPremRng As Range

Set IDump = Sheets("ImportDump")

Set f = IDump.Range("A1:A200").Find(What:="Capital Premier", LookIn:=xlValues, LookAt:=xlPart)
Set g = f.Offset(3, 1)
Set CapPremRng = g.Range("A1:I10")

CapPremRng.Copy
Sheets("Sheet3").Range("A1" & LastRow).PasteSpecial xlValues

End Sub

如果我创建另一个矩阵,例如eye(3),我可以通过push将其追加到最后!(A,eye(3))。然而,这会修改我不想要的A.理想情况下,我正在寻找的是一些语法糖,如

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

其中B的类型为Array {Array {Float64,2},1},B [end]为eye(3),length(B)为length(A)+1。

此语法B = [A; eye(3)]不起作用。 有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:6)

在v0.4.5和v0.5(主版)中,您只需执行以下操作:

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

答案 1 :(得分:2)

我认为答案可能取决于您使用的Julia版本。

对于v0.4.x,正如您所注意到的,方括号连接失败。这是因为语法字面上说:创建一个新的向量,其中第一个元素是files.list <- list.files(pattern = ".txt") df <- data.frame(observed=integer(), simulated=integer(), ID=character(), stringsAsFactors=FALSE) for (i in 1: length(files.list)) { df.next <- read.table(files.list[[i]], header=TRUE) df.next$ID <- paste0('simu', i) df <- rbind(df, df.next) } ,第二个元素是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

我认为有一种更简洁的方法可以在主分支(v0.5)上完成所有这些,但我自己仍然在v0.4.x上。我认为在v0.5中你可以B = [deepcopy(A) ; Matrix{Float64}[ eye(3) for n = 1:1 ]] 来获得[eye(3)]