如何在不使用任何循环的情况下获取矩阵的行?

我有一个矩阵,我想读取矩阵的每一行,并使用tf.nn.top_k来找出每一行的前k个值。

我如何在不使用循环或列表解析的情况下获取矩阵的每一行?我想使用Tensorflow或numpy,并且我在考虑应用广播技术。

如果我将索引放入一个数组中,例如,如果矩阵中有10行,我将会有:

indices = [0,1,2,3......,9]

然后我可以应用广播吗?


回答:

比如(就像这里的另一个答案中那样):

a = np.random.randint(0, 1000, (4,4))

然后你可以简单地这样做:

np.sort(a)[:,-1:-3:-1]

其中,你可以用你想要获取的最大值数量来替换3这个索引。

编辑:为了回应你的评论:首先,我将数据类型改为浮点型(以处理1/3的值):

a = 1000*np.random.random((4,4))

然后我获取索引:

idx = a.argsort().argsort()

将前两个值设为1/3:

a[idx>=2] = 1./3.

将剩余值设为零:

a[idx<2] = 0

就这样完成了。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注