NumPy:在两列之间获得更高的值

时间:2015-03-01 14:08:37

标签: python arrays numpy

有这个:

g2 = np.array([[1,2,3,4,5,6,7,8,9,10],[1,2,1,3,4,5,6,7,9,2],[2,3,4,1,3,6,1,1,2,9]])
print g2.T
[[ 1  1  2]
 [ 2  2  3]
 [ 3  1  4]
 [ 4  3  1]
 [ 5  4  3]
 [ 6  5  6]
 [ 7  6  1]
 [ 8  7  1]
 [ 9  9  2]
 [10  2  9]]

如何以漂亮的方式打印?对于每一行,最后两列之间的较高值的列数。

我想要这样的事情:

 [[ 1 column 3 ]
 [ 2  column 3]
 [ 3  column 3]
 [ 4  column 3]
 [ 5  column 2]
 [ 6  column 2]
 [ 7  column 3]
 [ 8  column 2]
 [ 9  column 3]
 [10  column 3]]

1 个答案:

答案 0 :(得分:0)

您可以使用argmax查找最大值的索引。首先使用g2.T[:, 1:]选择最后两列,然后跨轴1计算argmax

由于您已声明要将列标记为1,2和3,因此您需要将2添加到argmax返回的内容:

>>> np.argmax(g2.T[:, 1:], axis=1) + 2
array([3, 3, 3, 2, 2, 3, 2, 2, 2, 3], dtype=int64)

如果要将此数组与数组g2.T的第一列堆叠,可以使用column_stack。整件事看起来像这样:

>>> np.column_stack((g2.T[:, 0], np.argmax(g2.T[:, 1:], axis=1) + 2))
array([[ 1,  3],
       [ 2,  3],
       [ 3,  3],
       [ 4,  2],
       [ 5,  2],
       [ 6,  3],
       [ 7,  2],
       [ 8,  2],
       [ 9,  2],
       [10,  3]], dtype=int64)