Numpy: argsort 不适用于多维数组

创建于 2014-05-19  ·  12评论  ·  资料来源: numpy/numpy

考虑以下代码:
a = np.random.random([5,5])
ind = np.argsort(a,axis=1)
a_sorted = a[ind]
np.sort(a,axis=1)

现在 a_sorted 和 a 都应该沿 1 轴排序。 然而,甚至形状不再相同。 a 仍然是 (5,5) 而 a_sorted 是 (5,5,5)。 如果这是预期的行为,有人可以告诉我为什么吗?

最有用的评论

如果有一个如何实际使用输出对 ND 数组进行排序的示例,那就太好了。

如果有比a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]更具可读性的解决方案也很好

所有12条评论

argsort()工作正常,但索引并没有像您期望的那样工作。

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing

尝试这个:

a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)

我也以同样的方式感到困惑。 该文件特别指出,

退货
index_array : ndarray, int
沿指定轴对a排序的索引数组。
换句话说, a[index_array]产生一个排序的a

这仅适用于一维数组。 是否应该扩展文档以指定 ND 阵列不是这种情况?

@lzkelley是的,非常欢迎改进文档的补丁。

@shoyer很酷,我会为它做一个 PR 并更新

如果有一个如何实际使用输出对 ND 数组进行排序的示例,那就太好了。

如果有比a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]更具可读性的解决方案也很好

也许@seberg可以使它成为他的索引功能添加之一。

我认为它显然不适合索引,选择功能左右可能更容易匹配。

+1 表示新功能。

argsort (与sort )的全部目的不是用于索引吗?

argsort提供了沿轴排序的索引,但实际上使用索引沿该轴排序似乎不必要地冗长。 除非有我不知道的更简单的方法。

选择功能左右可能更容易匹配。

这是#8708

此页面是否有帮助?
0 / 5 - 0 等级