构建张量而不是可变大小的数组

问题描述 投票:1回答:1

因此,这里的消息:

  1. 想象一下,一个魔方;它的3x3x3。我碰巧有一个数组,它是一个魔方“魔方”还是一4x4xn。用正出发为1
  2. 当在阵列中的每个4×4矩阵一定条件为真,则矩阵复制自身;这是正增长1(阵列,或魔方变长/变为长方体)。比方说,对于阵列中的每个4×4矩阵中,如果[2,4]> [2,1],则矩阵复制阵列内的本身另一个版本。
  3. 当在阵列中的每个4×4矩阵,它同某些条件为假,则该基体本身“管芯”或擦除了自身的存在。磁盘阵列,魔方变短。比方说,对于阵列中的每个4×4矩阵中,如果[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
        }
    }
}

这是行不通的。

arrays r matrix rubiks-cube
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)
© www.soinside.com 2019 - 2024. All rights reserved.