从numpy argsort获得奇怪的结果

时间:2019-02-13 00:12:34

标签: python numpy

我(用我看来)有一个非常清晰的例子,它带有numpy argsort,它在产生奇怪的结果。如果我创建一个字符数组示例:

letters = np.array([['b','a','c'],
                    ['c','a','b'],
                    ['b','c','a']]).astype(str)

然后我正在寻找对行进行排序(并保留排序顺序,以备后用)。我从argsort获得的输出是

sort_seq = np.argsort(letters, axis=1)
sort_seq
array([[1, 0, 2],
       [1, 2, 0],
       [2, 0, 1]])

这似乎使第一行正确,但其他行却没有。如果我用它来重建数组,那么我得到:

output = np.full_like(letters, '')
np.put_along_axis(output, sort_seq, letters,axis=1)
output

给出

array([['a', 'b', 'c'],
       ['b', 'c', 'a'],
       ['c', 'a', 'b']], dtype='<U1')

如果我在这里和其他站点上查看,我会发现多维数组的argsorting有时并不总是很好。但是此示例似乎与numpy文档中给出的示例非常接近-当然可以在这种情况下起作用了吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

对我很好:

<input type="file" accept="video/*">
<video controls></video>

这可能是我们如何理解In [88]: letters = np.array([['b','a','c'], ...: ['c','a','b'], ...: ['b','c','a']]).astype(str) ...: sort_seq = np.argsort(letters, axis=1) ...: In [89]: np.take_along_axis(letters, sort_seq, axis=1) Out[89]: array([['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']], dtype='<U1') 的问题。是“接受”订单还是“投入”订单?

要使用argsort,我们必须使用双重排序

put

numpy: find index in sorted array (in an efficient way)