追加/连接&排序两个Numpy矩阵

时间:2017-07-21 03:23:27

标签: python sorting numpy matrix

我有一个形状为[1,500]的输入数组:

  

[[0] [1] [2] ... [499]]

与形状为[1,500]的随机输出数组组合为:

  

[[22] [16] [11] ... [51]]

我尝试过使用concatenate或者像这样添加(一次1个):

inAndout = np.append(soloInput, outputMatrix, axis=1) #or:
inAndout = np.append(soloInput, outputMatrix, axis=1) #Commented 1 out each time

两者的输出与print(inAndOut)时的表格相当不错:

  

[[0 22] [1 16] [2 11] ... [499 51]] #Notice no','仅添加数组之间的间距

然后我使用:

sortedInput = np.sort(inAndout, axis=0)

结果是:

  

[[ 0 11 ] [ 1 16 ] [ 2 22 ] ... [ 499 51 ]] #It输入和输出

当我使用axis = 1时,它会产生一个未排序的矩阵。

我想要的是它只是根据输出进行排序,或者只根据输入进行排序:

  

[[ 0 22] [ 1 16] [ 2 22] ... [ 499 51 ]]#按输入排序   [[2 11 ] [1 16 ] [0 22 ] ... [499 51 ]]#按输出排序

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用argsort返回对输入或输出进行排序的索引,然后使用索引对所有列重新排序:

按输入排序:

inAndout[inAndout[:,0].argsort(),:]

按输出排序:

inAndout[inAndout[:,1].argsort(),:]

实施例

inAndout = np.array([[0, 22],[1, 16],[2, 11],[499, 51]])

inAndout

#array([[  0,  22],
#       [  1,  16],
#       [  2,  11],
#       [499,  51]])

inAndout[inAndout[:,0].argsort(),:]

#array([[  0,  22],
#       [  1,  16],
#       [  2,  11],
#       [499,  51]])

inAndout[inAndout[:,1].argsort(),:]

#array([[  2,  11],
#       [  1,  16],
#       [  0,  22],
#       [499,  51]])