快速排序多维数组

2024-04-25 03:46:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要尽快根据第一个子数组中的值对多维数组进行排序(该行被应用了数百万次)。在

下面是我最初的一行,我试图改善它的性能,但没有奏效。据我所知,我的numpy方法只对第一个子数组进行正确排序,而不对其余的子数组进行排序。在

我做错了什么?如何改进排序的性能?在

import numpy as np

# Generate some random data.
# I receive the actual data as a list, hence the .tolist()
aa = np.random.rand(10, 2000).tolist()

# This is the original line I need to process faster.
b1 = zip(*sorted(zip(*aa), key=lambda x: x[0]))

# This is my attempt at improving the above line's performance
b2 = np.sort(np.asarray(aa).T, axis=0).T

# Check if all sub-arrays are equal
for a, b in zip(*[b1, b2]):
    print(np.array_equal(a, b))

Tags: thenumpydata排序isasnpline
1条回答
网友
1楼 · 发布于 2024-04-25 03:46:26

当谈到lambdas时还是个新手,但是从我从你的代码中所了解到的一点来看,在你的lambda方法中,你使用x[0]来获取排序键,然后用这些键从aa中的每个元素中提取值。在NumPy术语中,这意味着获取数组版本中第一行的排序索引,然后索引到每一行(因为aa的每个元素都变成了数组a的每一行)。这基本上就是列索引。而且,sorted似乎维护相同元素的顺序。所以,我们需要使用argsort(kind='mergesort')。在

因此,我们可以简单地做-

a[:, a[0].argsort(kind='mergesort')] # a = np.array(aa) 

在你的NumPy代码中,你什么也没做,所以没有给出正确的结果。在

相关问题 更多 >