【发布时间】:2017-03-27 05:22:50
【问题描述】:
我认为这对于有经验的 numpy 用户来说是一个简单的问题。
我有一个分数矩阵。原始索引对应于样本,列索引对应于项目。例如,
score_matrix =
[[ 1. , 0.3, 0.4],
[ 0.2, 0.6, 0.8],
[ 0.1, 0.3, 0.5]]
我想获取每个样本的前 M 个项目索引。我也想获得前 M 分数。例如,
top2_ind =
[[0, 2],
[2, 1],
[2, 1]]
top2_score =
[[1. , 0.4],
[0,8, 0.6],
[0.5, 0.3]]
使用 numpy 执行此操作的最佳方法是什么?
【问题讨论】:
-
@Kasramvd 2D 的链接 dup 目标答案不会按照此问题的需要保持从最高到最低的顺序。所以,我正在重新开放,希望听起来不错。
-
@Divakar 我的回答提供了一个有序的结果。
-
@Kasramvd @Kasramvd
np.argpartition docs声明要保持顺序,我们需要为其提供一个整数序列,我认为这将是这些索引的范围,即range(N)在np.argpartition()内。你在那里用过这样的东西吗?对不起,如果我错过了! -
@Divakar 不,但当然仍然不能证明这不是重复的。另外我认为这种方法与
argsort版本没有任何显着差异。 -
@Kasramvd 这在很大程度上取决于尺寸。但这里有一个
runtime test,其中N明显小于轴长度。