lyn*_*nyi 1 r matrix downsampling sampling
我有一个相对较高的矩阵Q(100X500000),我想对它进行下采样.通过下采样,我将用一个例子来解释.
设Q =
1 4 9
3 2 1
Run Code Online (Sandbox Code Playgroud)
和缩减样本大小= n.我想从一个总和(Q)= 20个球中抽出n个球,每个球用6种方式中的1种颜色对应于矩阵的不同索引对.这就好像我有1个颜色的球A,4个颜色的球B等,我正在画n个球而没有替换.
我希望它以相同的格式返回,作为矩阵.一个示例返回值,例如,下采样(Q,3)=
0 0 2
1 0 0
Run Code Online (Sandbox Code Playgroud)
我的方法是尝试使用示例:
sample(length(as.vector(Q)), size=n, replace=FALSE, prob = as.vector(Q))
Run Code Online (Sandbox Code Playgroud)
然而问题是,样本认为1:长度(as.vector(Q))就像我拥有的所有球一样,所以我不能画出超过长度(as.vector(Q))球,因为我不是替换我的球.
那么为了适应我的方法,我需要通过从这个向量中减去1来更新我的概率,并使用某种类型的for循环逐个调用样本.它听起来不像很好的代码.
有没有更好的方法在R友好,不循环的方式做到这一点?
它效率有点低,但如果sum(Q)不是太大,你可以通过分解/复制矢量然后采样,然后重新聚合/制表来实现.
Q <- setNames(c(1,4,9,3,2,1),LETTERS[1:6])
n <- 10
set.seed(101)
s0 <- sample(rep(names(Q),Q),
size=n,replace=FALSE)
Q2 <- table(factor(s0,levels=names(Q)))
## A B C D E F
## 1 2 5 1 0 1
Run Code Online (Sandbox Code Playgroud)
我不确定你的矩阵结构.您可以使用dim(Q2) <- dim(Q)与原始矩阵相同的顺序重新组织结果...
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |