You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中如何实现类似NumPy lexsort的双数组排序功能

Python示例

NumPy中提供了lexsort方法,可实现数组间的嵌套排序:

该方法接收多个可类比为电子表格列的排序键,返回按多列规则排序后的整数索引数组。

参考如下示例:

import numpy as np

a = np.array([1,1,1,2,2,2])
b = np.array([10,8,11,4,8,0])

sorted_idx = np.lexsort((b,a))
print(b[sorted_idx])
# [ 8 10 11  0  4  8]

上述代码实现了先按a分组、组内对b排序的效果,排序结果如下:

1 1  1      2  2  2
8 10 11     0  4  8

我在Julia中未找到类似功能,想了解如何实现该需求,当前仅需要支持两列的排序场景即可。

Julia实现

我们使用相同的测试数据探索实现方案:

a = Vector([1,1,1,2,2,2])
b = Vector([10,8,11,4,8,0])

简单基准测试
using StructArrays
using DataFrames
using BenchmarkTools


a = rand(100000)
b = rand(100000)

function f1(a, b)
    return sortperm(StructArray((a, b)))
end

function f2(a, b) 
    return sortperm(DataFrame(a=a,b=b, copycols=false))
end
        
function f3(a, b)
    return sortperm(collect(zip(a, b)))
end

@btime f1(a,b)
@btime f2(a,b)
@btime f3(a,b)

测试结果如下:

6.075 ms (8 allocations: 781.50 KiB)
13.808 ms (8291 allocations: 5.93 MiB)
15.892 ms (7 allocations: 2.29 MiB)

可以看到基于StructArray的实现速度几乎是另外两种方案的2倍,且内存占用更低。


内容的提问来源于stack exchange,提问作者CodeNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:24:29