numpy 排序3D数据的方法[重复]

kqhtkvqz  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(124)

此问题在此处已有答案

Sorting a 2D numpy array by multiple axes(7个答案)
4天前关闭。
numpy中是否有一个方法可以让我按升序对这些3d向量进行排序?
例如:我有下面的输入数组,我想要下面的输出:

input_arr = np.array( [
    [[255,0,3],
    [255,4,100],
    [255,2,3],
    [255,3,3],
    [0,1,3],
    ] ]
, dtype='uint8')

# Sort input_arr to produce the below

output_arr = np.array( [
    [[0,1,3],
    [255,0,3],
    [255,2,3],
    [255,3,3],
    [255,4,100],
    ] ]
, dtype='uint8')

我试过下面的方法,但它没有产生我上面想要的结果,而是产生了下面的结果。

output_arr2 = np.sort( input_arr, axis=0)

# Results in the below
[[[255   0   3]
 [255   4 100]
 [255   2   3]
 [255   3   3]
 [  0   1   3]]]
gwbalxhn

gwbalxhn1#

output_arr = np.asarray(list(map(lambda x: sorted(
    x, key=lambda rows: tuple(rows)), input_arr)), dtype='uint8')

这段代码接受一个二维输入数组input_arr,根据行中的值按升序对每个二维子数组的行进行排序,并将排序后的数组存储在一个新的二维NumPy数组output_arr中。
下面是代码的一步一步的分解:

  1. lambda行:tuple(rows)创建了一个lambda函数,它接受一行并将其转换为元组。这被用作下面的sorted()函数的关键函数。
  2. lambda x:sorted(x,key=lambda rows:tuple(rows))创建一个lambda函数,该函数接受一个子数组x,并使用在步骤1中创建的lambda函数作为排序的关键函数,根据每行中的值以升序对其行进行排序。
    1.Map(λ x:排序(x,键=lambda行:tuple(rows)),input_arr)将第2步中的lambda函数应用于input_arr中的每个子数组,从而得到一个可迭代的排序子数组。
  3. list()将步骤3中的iterable转换为列表。
  4. np.asarray()将步骤4中的列表转换为NumPy数组,数据类型指定为uint8。
    总之,这段代码接受一个二维输入数组,根据每行中的值按升序对每个子数组进行排序,并返回一个新的二维NumPy数组和排序后的子数组。

相关问题