百科问答小站 logo
百科问答小站 font logo



R语言,累计求和号连续几个∑∑∑∑这样的怎么编码? 第1页

  

user avatar   liu-yang-zhou-23 网友的相关建议: 
      

献丑了。期待看到更好的方案。

高维数据的存储

如果是问高维数据如何存储,我建议用列表:

        A = list(1:3, 4:6, 7:9)  B = list(11:13, 14:16, 16:19)  C = list(21:23, 24:26, 27:29)  T = list(A, B, C) > T [[1]] [[1]][[1]] [1] 1 2 3  [[1]][[2]] [1] 4 5 6  [[1]][[3]] [1] 7 8 9   [[2]] [[2]][[1]] [1] 11 12 13  [[2]][[2]] [1] 14 15 16  [[2]][[3]] [1] 17 18 19   [[3]] [[3]][[1]] [1] 21 22 23  [[3]][[2]] [1] 24 25 26  [[3]][[3]] [1] 27 28 29     

这样我们就得到一个 的立方阵,至于求和那就很简单了:

       > sum(as.vector(unlist(T))) [1] 405     

可以验证

       S = 0 for(i in 1:3)for(j in 1:3)for(k in 1:3) S = S + T[[i]][[j]][[k]] > S [1] 405     

指标的排列

如何将多重求和转化为如下的形式,

这需要将求和指标 按某种顺序不重不漏地排列。

       #可重复元素的树形图,以矩阵形式列出 CC<-function(n,m) {   M = n^m; N = m*M     C = rep(0, N); C = matrix(C, ncol = m)       a = 1:n     for(i in m:1)     {   B = c()         for(j in a) {copy = n^(m - i); b = rep(j, copy); B = c(B, b)}         B = rep(B, M/(n*copy))         C[,i] = t(B)     }     C  } #例:3 表示每层求和次数,2 表示求和重数 > CC(3,2)       [,1] [,2]  [1,]    1    1  [2,]    1    2  [3,]    1    3  [4,]    2    1  [5,]    2    2  [6,]    2    3  [7,]    3    1  [8,]    3    2  [9,]    3    3     

这样一来,求和指标就完美地排列下来,然后在构造计算 的函数时,定义自变量为指标向量 的函数:

       P <- function(I) expr     

于是,无论是求几重的求和,都可以用 重循环就搞定了(尽管是形式上的):

       # n 表示每层求和次数,m 表示求和重数 S = 0; L = n^m; C = CC(n, m) for(i in L){ I = C[i, ]; S = S + P(I) } S     

副产品

我以前写过不可重复元素的树形图的函数:

       #树形图,n  size, m 为初始数 #树形图采用矩阵形式表示  #这里本来直接定义阶乘函数就行了,但不知道当时抽了什么筋,非要定义成 gamma 函数 gamma <- function(n) {   g = 1     for(i in 2:(n-1)){ g = g*i }     g }  #在Tree的基础上转化为矩阵形式 TT<-function(n,m) {   M = gamma(n); N = n*M     TT = rep(0,N); TT = matrix(TT,ncol = n); TT[,1] = m     a = 1:n     T = list(c(m),a[which(a != m)])     TT[,2] = T[[2]]; TT[,2] = sort(TT[,2])     for(i in a[-(1:2)])     {         p = n - i + 2         T[[i]] = 0         q = length(T[[i - 1]])/p         for(j in 1:q)         {   t = T[[i-1]][((j-1)*p+1):(j*p)]             r = length(t)             for(k in 1:r) T[[i]] = c(T[[i]],t[which(t != t[k])])         }         T[[i]] = T[[i]][-1]         L = length(T[[i]])         TT[,i] = as.vector(t(matrix(rep(T[[i]],M/L),L)))     }     TT  } #例: TT(4,4) 表示以 4 为起始,123 作为分叉的树形图 > TT(4,4)      [,1] [,2] [,3] [,4] [1,]    4    1    2    3 [2,]    4    1    3    2 [3,]    4    2    1    3 [4,]    4    2    3    1 [5,]    4    3    1    2 [6,]    4    3    2    1     

如果去掉第一列,

       > TT(4,4)[,-1]       [,1] [,2] [,3]  [1,]    1    2    3  [2,]    1    3    2  [3,]    2    1    3  [4,]    2    3    1  [5,]    3    1    2  [6,]    3    2    1     

就可以得到 的全排列。




  

相关话题

  傅里叶级数和傅里叶变换是什么关系? 
  数学思维是什么?如何培养? 
  外国人是不是也背诵乘法口诀? 
  阿贝尔定理有什么哲学思想? 
  学数学是不是真的脑子好比努力还重要? 
  请问假设检验(hypothesis testing)的意义到底是什么,它的原理是什么样的? 
  波恩哈德·黎曼这个人有多强? 
  怎样直观的理解「极大无关组」,以及极大无关组的求法? 
  印刷体的数学符号在手写的时候有哪些规范? 
  一元微分理论中,为什么 d(dy/dx)/dx=d^2y/(dx)^2 ? 

前一个讨论
《七龙珠》的占卜婆婆、天神、孙悟空的“瞬间移动”有什么区别?
下一个讨论
孤独终老和勉强结婚,你会选什么?





© 2024-06-18 - tinynew.org. All Rights Reserved.
© 2024-06-18 - tinynew.org. 保留所有权利