python数组按行范数排序_按维数上的范数对多维NumPy数组排序

本文介绍了如何使用NumPy中的einsum函数和argsort方法,高效地按行范数对二维及高维数组进行排序。通过对比不同方法的运行时间,表明einsum方法在性能上具有优势。同时,给出了针对单精度维度和一般形状数组的排序示例。
摘要由CSDN通过智能技术生成

您可以使用^{}-a[np.arange(a.shape[0])[:,None], sortidxs]

样本运行-

^{pr2}$

进一步提高性能

我们可以用^{}-sortidxs = np.einsum('ijk,ijk->ij',a,a).argsort()

让我们计时并验证这个想法-In [94]: a = np.random.randint(0,9,(20,30,40))

In [95]: %timeit np.argsort(np.linalg.norm(a, axis=-1))

10000 loops, best of 3: 63.5 µs per loop

In [96]: %timeit np.einsum('ijk,ijk->ij',a,a).argsort()

10000 loops, best of 3: 19.7 µs per loop

In [97]: a = np.random.randint(0,9,(200,300,400))

In [98]: %timeit np.argsort(np.linalg.norm(a, axis=-1))

10 loops, best of 3: 88.6 ms per loop

In [99]: %timeit np.einsum('ijk,ijk->ij',a,a).argsort()

10 loops, best of 3: 22.6 ms per loop

高维数组

对于a是4D数组的附加情况,我们需要使用更多的数组来索引。在

1]对于第一个轴:在末尾使用np.arange(a.shape[0])和两个新轴。在

2]对于第二个轴:在末尾使用np.arange(a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值