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

所以有一个这样的矩阵:


[[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 = 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


out = 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.]]


拉丁的传说
浏览 271回答 3
3回答

慕森卡

你可以用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, :])].

芜湖不芜

你可以用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, :])].

繁星coding

使用 argsort 选择 con 作为索引:import numpy as npnum_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)] = coni = np.argsort(con)seq = seq[:,i]print(con)print(seq)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python