为了账号安全,请及时绑定邮箱和手机立即绑定

如何按一行对矩阵进行排序 - Python

如何按一行对矩阵进行排序 - Python

拉丁的传说 2021-10-26 15:39:06
所以有一个这样的矩阵:[[0. 1. 0. 0. 0.][1. 0. 0. 0. 0.][0. 0. 0. 1. 0.][0. 0. 0. 0. 1.][1. 0. 3. 4. 4.]]如何按最后一行对其进行排序,以便列的内容保持不变,如下所示:[[1. 0. 0. 0. 0.][0. 1. 0. 0. 0.][0. 0. 0. 1. 0.][0. 0. 0. 0. 1.][0. 1. 3. 4. 4.]]现在我是这样做的:num_seq = 10seq_len = 5seq_width = 5con = np.random.randint(0, seq_width,size=seq_len)seq = np.zeros((seq_len, seq_width))seq[np.arange(seq_len), con] = 1seq[seq_len-1, np.arange(seq_width)] = conout = np.sort(seq, axis=1)并获得如下所示的输出:[[0. 0. 0. 0. 1.] [0. 0. 0. 0. 1.] [0. 0. 0. 0. 1.] [0. 0. 0. 0. 1.] [0. 1. 3. 4. 4.]]
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

你可以用np.argsort()一些 numpy 切片来做到这一点。使用您的示例数组:


arr = np.array([[0, 1, 0, 0, 0],

                [1, 0, 0, 0, 0],

                [0, 0, 0, 1, 0],

                [0, 0, 0, 0, 1],

                [1, 0, 3, 4, 4]])

arr[:, np.argsort(arr[-1, :])]

# array([[1, 0, 0, 0, 0],

#        [0, 1, 0, 0, 0],

#        [0, 0, 0, 1, 0],

#        [0, 0, 0, 0, 1],

#        [0, 1, 3, 4, 4]])

基本上按最后一行内容的升序值np.argsort(arr[-1, :])返回最后一行的索引。这将返回您给出的示例。arrarray([1, 0, 2, 3, 4])


然后我们只需使用arr[:, np.argsort(arr[-1, :])].


查看完整回答
反对 回复 2021-10-26
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你可以用np.argsort()一些 numpy 切片来做到这一点。使用您的示例数组:


arr = np.array([[0, 1, 0, 0, 0],

                [1, 0, 0, 0, 0],

                [0, 0, 0, 1, 0],

                [0, 0, 0, 0, 1],

                [1, 0, 3, 4, 4]])

arr[:, np.argsort(arr[-1, :])]

# array([[1, 0, 0, 0, 0],

#        [0, 1, 0, 0, 0],

#        [0, 0, 0, 1, 0],

#        [0, 0, 0, 0, 1],

#        [0, 1, 3, 4, 4]])

基本上按最后一行内容的升序值np.argsort(arr[-1, :])返回最后一行的索引。这将返回您给出的示例。arrarray([1, 0, 2, 3, 4])


然后我们只需使用arr[:, np.argsort(arr[-1, :])].


查看完整回答
反对 回复 2021-10-26
?
繁星coding

TA贡献1797条经验 获得超4个赞

使用 argsort 选择 con 作为索引:


import numpy as np


num_seq = 10

seq_len = 5

seq_width = 5


con = np.random.randint(0, seq_width,size=seq_len)


seq = np.zeros((seq_len, seq_width))


seq[np.arange(seq_len), con] = 1

seq[seq_len-1, np.arange(seq_width)] = con



i = np.argsort(con)

seq = seq[:,i]


print(con)

print(seq)


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信