gpt4 book ai didi

performance - 按列排序或矩阵的 top-n

转载 作者:行者123 更新时间:2023-12-04 21:59:38 25 4
gpt4 key购买 nike

我需要对矩阵进行排序,以便所有元素都保留在它们的列中,并且每列都按升序排列。 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)个条目(大致是一个方阵),那么最快的方法是什么?我担心 apply 的性能损失和 friend 。

实际上,我不需要“排序”,只需要“前 n”,比如 n 大约为 30 或 100。我正在考虑使用 applypartial sort 的参数,但我想知道这是否比仅进行矢量化排序便宜。所以,在我自己做基准测试之前,我想征求有经验的用户的建议。

最佳答案

如果要使用排序,?sort表示 method = "quick"可以是默认方法的两倍,大约有 100 万个元素。

apply(m, 2, sort, method = "quick") 开始看看这是否提供了足够的速度。

请注意 ?sort 中对此的评论尽管;关系以不稳定的方式排序。

关于performance - 按列排序或矩阵的 top-n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com