python - numpy数组的就地置换

标签 python arrays algorithm numpy

我有一个非常大的一维 numpy 数组,我想对它在一个切片上应用一些排序,并检索排列向量以进行其他处理。

但是,ndarray.sort()(这是一个就地操作)方法不会返回此向量,我可能会使用 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 的 View 时,以下代码不修改 V?

Vslice = Vslice[iperm]

祝你好运!

弗朗索瓦

最佳答案

要回答为什么分配给查看不修改原始文件的问题:

您需要将 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])

关于python - numpy数组的就地置换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566566/

相关文章:

python - Kubernetes Python Pod分析

python - 如何使 Tkinter 在 mac OS 上看起来好看或自然?

php - 将字符串分解为没有空元素的数组?

java - 给定一个二叉树,其中每个节点都有一定的权重。您必须返回二叉树中的最大权重

python - Kombu以非阻塞方式

分配的 Python 对齐方式(样式)

python - 如何使用 try- except 计算 numpy 数组中的相邻单元格?

arrays - 用于不匹配数组维度的 Fortran 子例程指针

python - 为什么我的 Monty Hall 解决方案不起作用?

java - 为什么 Collections.sort() 针对 LinkedList 进行了优化,而没有针对 ArrayList 进行优化?