我需要对矩阵进行排序,以便所有元素都保留在列中,每列都按升序排列.对于R中的矩阵或数据帧,是否存在矢量化列式排序? (我的矩阵是全正的并且由B界定,所以我可以将j * B添加到第j列
> set.seed(100523); m <- matrix(round(runif(30),2), nrow=6); m [,1] [,2] [,3] [,4] [,5] [1,] 0.47 0.32 0.29 0.54 0.38 [2,] 0.38 0.91 0.76 0.43 0.92 [3,] 0.71 0.32 0.48 0.16 0.85 [4,] 0.88 0.83 0.61 0.95 0.72 [5,] 0.16 0.57 0.70 0.82 0.05 [6,] 0.77 0.03 0.75 0.26 0.05 > offset <- rep(seq_len(5), rep(6, 5)); offset [1] 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 > m <- matrix(sort(m + offset), nrow=nrow(m)) - offset; m [,1] [,2] [,3] [,4] [,5] [1,] 0.16 0.03 0.29 0.16 0.05 [2,] 0.38 0.32 0.48 0.26 0.05 [3,] 0.47 0.32 0.61 0.43 0.38 [4,] 0.71 0.57 0.70 0.54 0.72 [5,] 0.77 0.83 0.75 0.82 0.85 [6,] 0.88 0.91 0.76 0.95 0.92
但是还有更美观的东西吗?)否则,如果我的矩阵有大约1M(10M,100M)条目(大致是方阵),那么最快的方法是什么?我很担心申请和朋友的性能损失.
实际上,我不需要“排序”,只需要“前n”,n大约是30或100.我正在考虑使用apply和sort的部分参数,但我想知道这是否比仅仅进行矢量化排序更便宜.所以,在我自己做基准测试之前,我想请有经验的用户提出建议.
如果你想使用sort,?sort表示method =“quick”的速度可以是默认方法的两倍,大约是100万个元素.首先使用apply(m,2,sort,method =“quick”)并查看是否提供足够的速度.
请记下对此的评论吗?联系以不稳定的方式排序.