【发布时间】:2021-02-12 20:23:59
【问题描述】:
我一直使用 numpy.argsort 处理一维数据,但它在 2D 中的表现似乎有所不同。
例如,假设我想沿轴 1 对该数组进行 argsort,以便每行中的项目按升序排列
>>> import numpy as np
>>> arr = np.eye(4)
>>> arr
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
>>> idx = np.argsort(arr, axis=1)
>>> idx
array([[1, 2, 3, 0],
[0, 2, 3, 1],
[0, 1, 3, 2],
[0, 1, 2, 3]])
到目前为止一切都很好。
上面的每一行给出了列在第二个数组中应该如何重新排列的顺序。
假设我们想用上面的idx对下面的数组进行排序。
>>> arr2 = np.arange(16).reshape((4, 4))
>>> arr2
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> sorted = arr2[idx]
>>> sorted
array([[[ 8, 9, 10, 11],
[12, 13, 14, 15],
[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
....
[[ 8, 9, 10, 11],
[12, 13, 14, 15],
[ 0, 1, 2, 3],
[ 4, 5, 6, 7]]])
>>> sorted.shape
(10, 4, 4)
形状现在增加了尺寸。
我期待得到。
array([[ 1, 2, 3, 0],
[ 4, 6, 7, 5],
[ 8, 9, 11, 10],
[12, 13, 14, 15]])
我可以对行进行迭代,这很糟糕!
>>> rows = []
>>> for i, row in enumerate(arr2):
... rows.append(row[idx[i]])
>>> np.arrays(rows)
array([[ 1, 2, 3, 0],
[ 4, 6, 7, 5],
[ 8, 9, 11, 10],
[12, 13, 14, 15]])
【问题讨论】:
标签: python arrays numpy np.argsort