1

所以这里是瘦的:

  1. 想象一个魔方;它是 3x3x3。我碰巧有一个数组,它是一个魔方的“立方体”,只是它是 4x4xn。n 从 1 开始

  2. 当数组中每个 4x4 矩阵中的某个条件为真时,矩阵就会自我复制;即 n 增长 1(数组或魔方变长/变成长方体)。假设对于数组中的每个 4x4 矩阵,如果 [2,4] > [2,1],则矩阵在数组中复制其自身的另一个版本。

  3. 当数组中每个 4x4 矩阵中的相同特定条件为假时,矩阵本身就会“死亡”或将其自身抹去不复存在。数组或魔方变得更短。比方说,对于数组中的每个 4x4 矩阵,如果 [2,4] < [2,1],则矩阵会将自身从数组中擦除。

  4. 所以我试图将它构建成一个数组,显然你不能随意从数组中添加和删除矩阵。

  5. 有人告诉我你必须建立一个张量——(从我的概念模型到维基百科所说的,看起来这是一个二阶应力张量)。我不是物理学家,也绝对不是数学纯粹主义者。我是一个基础应用数学专家(ORSA),但我没有任何学位,只有几年的“分析”经验。

  6. 是否有人可以为我演示如何在 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

1 回答 1

4

由于您需要能够从数组中添加或删除 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)
于 2012-05-23T04:24:31.887 回答