所以这是瘦的:
-
想象一个魔方;它是3x3x3。 我碰巧有一个数组是魔方的"立方体",只是它是 4x4xn。 n 以 1 开头
-
当数组中每个 4x4 矩阵中的某个条件为真时,矩阵就会自我复制;即 n 增长 1(数组或魔方变长/变成长方体)。 假设,对于数组中的每个 4x4 矩阵,如果 [2,4]> [2,1],则矩阵在数组中复制自身的另一个版本。
-
当数组中每个 4x4 矩阵中的相同特定条件为假时,矩阵本身就会"死亡"或将自身抹去。 数组或魔方变短。 假设,对于数组中的每个 4x4 矩阵,如果 [2,4] <[2,1],则矩阵会将自身从数组中擦除。
-
所以我试图把它构建到一个数组中,显然你不能随意从数组中添加和删除矩阵。
-
有人告诉我你必须建立一个张量 - (从我的概念模型到维基百科所说的,看起来这是一个二阶应力张量)。 我不是物理学家,绝对不是数学纯粹主义者。 我是一个基础应用数学的人(ORSA),但我没有任何学位,只有几年的"分析"经验。
-
任何人都可以为我演示如何在 R 中构建此结构。 我希望你明白,找到关于如何在我认为我正在写的类型的 R 中构建张量的可理解/概念信息是非常困难的。
非常感谢您能提供的任何帮助。
我对此非常感激。
所以这是我尝试过的一些方法:
cells<-c(0,.4,0,0,.25,.6,.25,.5,4,12,4,10,20,0,0,0)
Mu<-matrix(cells, 4,4, byrow=TRUE)
Ma<-list(Mu)
for(i in Ma){
if(i[2,4] > i[2,1]){
j <-length(Ma) + 1
c[Ma, j<-Mu]
}else if(i[2,4] < i[2,1]){
Ma[[i]] <- NULL
}
}
}
这行不通。
由于您需要能够在数组中添加或删除 4*4 个矩阵,使用 4*4 矩阵列表而不是数组可能更容易。
# Initial data
d <- replicate(3, matrix(sample(1:16),4,4), simplify=FALSE)
# Remove an element
remove <- function(d, i) {
d[[i]] <- NULL
d
}
# Duplicate an element
duplicate <- function(d, i) {
d <- append(d, list(d[[i]]))
d
}
# Example
d <- remove(d, 1)
d <- duplicate(d, 2)
d <- remove(d, 1)
d
如果性能是一个问题(列表被一次又一次地复制),您可能更喜欢使用环境。
# Sample data
d <- replicate(3, matrix(sample(1:16),4,4), simplify=FALSE)
names(d) <- as.character(seq_along(d))
e <- as.environment(d)
# Remove an element
remove <- function(e, i) {
rm(list=as.character(i), envir=e)
e
}
# Duplicate an element
duplicate <- function(e, i) {
stopifnot( length(ls(e)) > 0 )
j <- max( as.numeric(ls(e)) ) + 1
assign( as.character(j), get( as.character(i), envir=e ), envir=e )
e
}
# Example (the elements are named, and their names do not change)
remove(e, 1)
duplicate(e, 3)
remove(e, 2)
as.list(e)
根据复制和删除的条件,这将变为:
# Sample data
d <- replicate(3, matrix(sample(1:16),4,4), simplify=FALSE)
names(d) <- as.character(seq_along(d))
e <- as.environment(d)
# Main loop
for(i in ls(e)) { # i is the name of the matrix
m <- get(i, envir=e) # The matrix itself
if(m[2,4] > m[2,1]) {
cat("Duplicating", i, "n")
duplicate(e, i)
} else {
cat("Removing", i, "n")
remove(e, i)
}
}
as.list(e)