我有一个名为推理的矩阵,由存储项目ID的数组组成.每个数组代表对一个客户的建议.以下是一个数组的快照.

inference[0] = array([ 1, 17,  0, 29, 33, 10, 23, 18,  4, 25, 37, 41, 19,  7, 45, 44, 28,
        5, 21, 30, 27,  6, 16, 32,  3, 46, 47, 11, 24, 35, 39, 15, 22, 31,
       43], dtype=int32)

我还有一个名为Score的矩阵,由存储相应索引的ItemID的预测分数的数组组成.每个数组表示一个客户的一组ItemID分数.以下是一个数组的快照.

score[0] = array([ 4.66423448e-01,  3.04435879e-01,  1.20756114e-01,  7.42338740e-03,
        1.00917931e-02,  3.40771784e-02,  2.95762312e-02,  4.64895252e-03,
       -4.86475747e-02, -5.37142403e-03, -2.96056704e-04, -3.23560827e-05,
       -2.89172482e-02, -3.72408911e-02, -6.24527574e-01, -1.06988378e-04,
       -1.80022987e-03, -3.40648238e-02, -2.07088395e-02, -2.53725616e-03,
       -2.20156523e-02, -3.26039633e-02, -5.12802875e-02, -1.61312032e-03,
       -1.99290374e-01, -1.46841628e-04, -8.44907165e-01, -1.73397407e-01,
       -3.57963537e-02, -1.43663881e-03, -1.67909664e-03, -5.75751424e-03,
       -2.39864983e-02, -3.77825587e-03, -9.72822814e-04])

因此,对于客户0,Itemid#1的模型预测分数是4.66423448e-01,Itemid#17的预测分数是3.04435879e-01...诸若此类.

我想按分数矩阵对推理矩阵进行排序.例如,用于

sorted_matrix[0] = array([ 1, 17,  0, 10, 23, 33, 29, 18, 41, 44, 46, 37, 43, 35, 32, 39, 28,
       30, 31, 25, 15, 21, 27, 22, 19,  6,  5, 24,  7,  4, 16, 11,  3, 45,
       47], dtype=int32)

在数组级别,我简单地这样做了

inference[0][np.argsort(-1 * (score))[0]]

而且它起作用了.然而,当我try 用来排序整个矩阵时

new_inference = inference[np.argsort(-score)]

它导致嵌套矩阵,其中new_inference[0]本身成为35x35矩阵,而不是array.

我在这里使用np.argsort()做错了什么?

推荐答案

您似乎想要的是根据scores的排序行重新排序的inference行.要对scores的每一行进行排序,请使用np.argsort(scores, axis=1).为了能够使用该结果对inference进行重新排序,我将使用hpaulj3">this answerxhpaulj.

import numpy as np

def indices_for_2d_sort(a, ascending=True):
    """https://stackoverflow.com/a/33141247/12131013"""
    m = 1 if ascending else -1
    i = np.argsort(m*a, axis=1)
    return (np.arange(a.shape[0])[:,None], i)

rng = np.random.default_rng()

M = 5
N = 10
inference = np.ones((M, N))*np.arange(N)
[rng.shuffle(row) for row in inference]   # randomizes inference

scores = rng.random((M, N))

new_inference = inference[indices_for_2d_sort(scores)]

Python相关问答推荐

Python tkinter关闭第一个窗口,同时打开第二个窗口

Django注释:将时差转换为小数或小数

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

Polars:使用列值引用when / then表达中的其他列

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

如何删除索引过go 的lexsort深度可能会影响性能?' &>

在Python Attrs包中,如何在field_Transformer函数中添加字段?

如何在polars(pythonapi)中解构嵌套 struct ?

Python库:可选地支持numpy类型,而不依赖于numpy

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

Python虚拟环境的轻量级使用

OR—Tools CP SAT条件约束

Pandas:将多级列名改为一级

当点击tkinter菜单而不是菜单选项时,如何执行命令?

实现神经网络代码时的TypeError

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

幂集,其中每个元素可以是正或负""""

如何使用OpenGL使球体遵循Python中的八样路径?

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送