如何对一个包含多个2维数组的3维数组进行排序?
我有一个形状为 (10, 1000, 3)
的数组。
我想要按照每个子数组中最后一列进行反向排序。
循环解决方案:
result = []
for subarr2d in arr3d:
subarr2d_sorted = subarr2d[subarr2d[:, -1].argsort()][::-1]
result.append(subarr2d_sorted)
我只想在numpy中实现这个功能?这真的可能吗?
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
。