假设我有一个矩阵数组,名为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)]不起作用。 有人能指出我正确的方向。
答案 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)]
。