一个纽比排列的原位排列

2024-05-28 11:17:13 发布

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

我有一个相当大的一维numpy数组,我想在一个切片上应用一些排序,并检索置换向量以进行其他处理。在

但是ndarray.排序()(这是一个就地操作)方法不返回此向量,我可以使用ndarray.argsort公司()方法得到排列向量并用它来排列切片。但是,我想不出该怎么做。在

Vslice = V[istart:istop]  # This is a view of the slice

iperm = Vslice.argsort()

V[istart:istop] = Vslice[iperm]  # Not an inplace operation...

附加问题:为什么下面的代码在我们处理V视图时没有修改V?在

^{pr2}$

致以最良好的祝愿!在

弗朗索瓦


Tags: 方法numpy排序is公司切片数组this
1条回答
网友
1楼 · 发布于 2024-05-28 11:17:13

要回答您的问题:为什么“分配到视图”不会修改原始视图:

您需要将Vslice = Vslice[iperm]更改为Vslice[:] = Vslice[iperm],否则您将为Vslice分配一个新值,而不是更改Vslice中的值:

>>> a = np.arange(10, 0, -1)
>>> a
array([10,  9,  8,  7,  6,  5,  4,  3,  2,  1])
>>> b = a[2:-2]
>>> b
array([8, 7, 6, 5, 4, 3])
>>> i = b.argsort()
>>> b[:] = b[i]  # change the values inside the view
>>> a            # note `a` has been sorted in [2:-2] slice
array([10,  9,  3,  4,  5,  6,  7,  8,  2,  1])

相关问题 更多 >