如何使用NumPy对3D数组的内部2D数组进行排序?

3

如何对一个包含多个2维数组的3维数组进行排序?

我有一个形状为 (10, 1000, 3) 的数组。

我想要按照每个子数组中最后一列进行反向排序。

循环解决方案:

result = []
for subarr2d in arr3d:
    subarr2d_sorted = subarr2d[subarr2d[:, -1].argsort()][::-1]
    result.append(subarr2d_sorted)

我只想在numpy中实现这个功能?这真的可能吗?

1个回答

1
你可以使用 numpy.sort 函数,并选择内部的 axis 参数进行排序。
import numpy as np

result = np.random.randint(20, size=(3, 4, 3))
print(np.sort(result, axis=2))

# outputs
# [[[ 8 11 11]
#   [ 2 11 16]
#   [ 3  7 14]
#   [ 7 12 12]]

#  [[ 8 10 16]
#   [ 0  6 14]
#   [ 0 16 17]
#   [ 0 14 19]]

#  [[ 2  4  5]
#   [ 3  4  4]
#   [ 1  1 11]
#   [ 0  8 17]]]

print(np.sort(result, axis=1))

#outputs
# [[[ 7  2  7]
#   [11  3 11]
#   [12  8 11]
#   [16 12 14]]

#  [[14  6  0]
#   [16  8  0]
#   [17 14  0]
#   [19 16 10]]

#  [[ 2  1  0]
#   [ 3  4  1]
#   [11  4  4]
#   [17  8  5]]]

要按降序获取排序后的数组,您可以使用 -np.sort(-result, axis=2),您可能还想检查 numpy.flip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接