当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 列式排序或矩阵的top-n

来源:互联网 收集:自由互联 发布时间:2021-06-22
我需要对矩阵进行排序,以便所有元素都保留在列中,每列都按升序排列.对于R中的矩阵或数据帧,是否存在矢量化列式排序? (我的矩阵是全正的并且由B界定,所以我可以将j * B添加到第j列
我需要对矩阵进行排序,以便所有元素都保留在列中,每列都按升序排列.对于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”)并查看是否提供足够的速度.

请记下对此的评论吗?联系以不稳定的方式排序.

网友评论