r语言 - 构建张量而不是可变大小的数组



所以这是瘦的:

  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*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)

相关内容

  • 没有找到相关文章

最新更新