如何在3d数组中排序每个2d数组?
我有一个形状为(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