【问题标题】:Create many new matrices from a larger matrix从更大的矩阵创建许多新矩阵
【发布时间】:2013-01-21 17:58:27
【问题描述】:

我对 R 比较陌生,尽管我已经完成了大量简单的 R 编程。我认为这应该是一个简单的问题,但我似乎无法弄清楚。

更新:

情况是,由于计算机上的内存限制,我需要对数据进行分段以进行回归分析。我基本上有三个相关的矩阵,分别称为 X (n x k)、y (n x 1) 和 Om (n x n) 我需要将这三个矩阵按行分解,以各种方式将它们相乘,然后将结果相加。由于 Om 的错误结构,一些组必须是 3 行,其他 2 行和其他 1 行。对于 3 组,我们将有:

Xi (3 x k)、yi (3 x 1) 和 Om3 (3 x 3)

我已经在 R 中构建了 Om1、Om2 和 Om3

Om1<-matrix(2)

vec1<-c(2,-1)
vec2<-c(-1,2)
Om2<-rbind(vec1,vec2)

vec3<-c(2,-1,0)
vec4<-c(-1,2,-1)
vec5<-c(0,-1,2)
Om3<-rbind(vec3,vec4, vec5)

现在的问题是我如何分解 X 和 y 以便我可以匹配 X、y 和 Om 的行。我在想我需要一个循环,但不能让它像这样工作:

for(i in 1:280){
  assign(paste("xh", i, sep = ""), i)    
}
for(i in 1:145){
  xhi<- X[i,] 
}
for(i in 146:195){
  xhi<-X[ seq( from=i , length=2) , ]
}

for(i in 196:280){
  xhi<-X[ seq( from=(i+49) , length=3) , ]
}

前 145 个 xi 对应于 Om1,接下来的 50 个 xi 对应于 Om2...我想我需要一种方法来索引它们,这与最终我需要总结 xi 的乘积相同, yi 和 Omi 隔着 i 的

抱歉,这篇文章试图详尽,任何建议将不胜感激

【问题讨论】:

    标签: r loops matrix


    【解决方案1】:

    假设这个矩阵被命名为mtx,你想要 10 个这样的矩阵,行数增加,并且它至少有 55 行,因为每次迭代增加 1 的长度总和是 n(n+1 )/2:

    mlist <- list()
    for (x in 1:10) mlist[[x]] <-mtx[ seq( from=x*(x-1)/2+1 , length=x) , ]
    

    如果愿望如卡尔所说:

    mlist <- list()
    for (x in 1:10) mlist[[x]] <-mtx[ seq( from=1 , length=x) , ]
    

    或者:

    mlist <- list()
    for (x in 1:10) mlist[[x]] <-mtx[ seq( from=x , length=2) , ]
    

    【讨论】:

    • 我知道你在做什么,但无法与我阅读问题的方式相协调。我认为 OP 希望 mlist[[1]] 成为 X[1,]mlist[[2]] 成为 X[1:2,]X[2:3,] 等等。
    • OP 可以阐明需要什么。一旦我们看到一个例子或一个明确的描述,对序列表达式的修改应该是相当简单的。
    • 谢谢你的想法,我不确定这是否能正常工作,但它让我开始思考如何重新编码问题并将其定义为增加系列,我会尽快发布解决方案跨度>
    • 您可以发布可以理解的问题描述,而不是发布解决方案。
    • 好的,我会努力做到更完整:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多