【问题标题】:Creating larger matrix from original matrix with overlap columns in R从原始矩阵创建更大的矩阵,在 R 中具有重叠列
【发布时间】:2014-05-27 09:26:41
【问题描述】:

假设我们有一个 5*5(25 个元素)的矩阵

m<-matrix(1:25,5,5)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25

我想从矩阵“m”生成不同维度的大矩阵 例如 5*8,现在我的新矩阵的第二列必须与第一列重叠,依此类推。

所以更大的维度(例如 5*8)矩阵会像:(这只是示例,不确定移位量是否正确)

      [,1] [,2] [,3] [,4] ……………………[,8]
[1,]    1    4   7    10 …………………… 19
[2,]    2    5   8    11 …………………… 20  
[3,]    3    6   9    12 …………………… 21  
[4,]    4    7   10   13 …………………… 22 
[5,]    5    8   11   14 …………………… 23   

实际上,在每一列中,我们都会转移回最后一列的某些元素,以防止到达原始矩阵的最后一个元素并产生 NA 值。 请问有人知道如何创建这样一个更大的矩阵吗?

对我来说最难的部分是计算与较大矩阵大小有关的 SHIFT 值的数量。较大的矩阵必须覆盖原始矩阵的几乎所有元素。 (可以错过一些最后的元素) 谢谢

【问题讨论】:

  • 试着解释你的逻辑以及你尝试过的代码块......
  • 您要解决的问题是什么?正如建议的答案(和您自己的样本)所建议的那样,存在几乎无限可能的最终矩阵。您似乎唯一需要的就是max(final_matrix) &lt;= max(initial_matrix) 并且按列排序是单调递增的。
  • 我想找到最佳的重叠值,它使新矩阵的最后一个元素最接近原始矩阵的最后一个元素。这意味着选择较少的最佳值会产生 NA,而较高的值会忽略一些我们可以在更大矩阵中留出空间的元素。

标签: r overlap


【解决方案1】:

我不确定您想要什么,但这可能会有所帮助。

rows <- 5
cols <- 8
overlap <- 1
matrix(rep(seq(1,cols)*(rows-overlap),each=rows)+seq(1,rows)-(rows-overlap),nrow=rows)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    5    9   13   17   21   25   29
[2,]    2    6   10   14   18   22   26   30
[3,]    3    7   11   15   19   23   27   31
[4,]    4    8   12   16   20   24   28   32
[5,]    5    9   13   17   21   25   29   33
overlap <- 2
matrix(rep(seq(1,cols)*(rows-overlap),each=rows)+seq(1,rows)-(rows-overlap),nrow=rows)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    7   10   13   16   19   22
[2,]    2    5    8   11   14   17   20   23
[3,]    3    6    9   12   15   18   21   24
[4,]    4    7   10   13   16   19   22   25
[5,]    5    8   11   14   17   20   23   26
overlap <- 3
matrix(rep(seq(1,cols)*(rows-overlap),each=rows)+seq(1,rows)-(rows-overlap),nrow=rows)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    3    5    7    9   11   13   15
[2,]    2    4    6    8   10   12   14   16
[3,]    3    5    7    9   11   13   15   17
[4,]    4    6    8   10   12   14   16   18
[5,]    5    7    9   11   13   15   17   19

【讨论】:

  • 感谢您的回答。但我希望程序根据新矩阵的尺寸自动计算重叠,而不是手动分配重叠变量。再次感谢
【解决方案2】:

覆盖的最大效率为:(重叠的最佳值)

> overlap<-ceiling(rows*(1-length(dna1)/(cols*rows)))+round(rows/cols)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多