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

如何找到将一个数组置换为另一个数组的向量化Python函数?

向量化实现数组置换索引

要实现完全向量化的数组置换索引查找,替代带for循环的版本,可利用NumPy的argsort函数完成,无需显式循环。

方法一:双重argsort映射

利用argsort的特性,先对x1生成排序索引,再通过x2的排序索引映射得到最终的置换数组:

import numpy as np

def find_permutation_vectorized(x1, x2):
    sorter_x1 = np.argsort(x1)
    # 通过x2的排序索引,映射到x1的原索引
    return sorter_x1[np.argsort(x2)]

测试示例:

x1 = np.array([3, 1, 4, 2])
x2 = np.array([2, 1, 3, 4])
sort = find_permutation_vectorized(x1, x2)
print(sort)
# 输出: array([3, 1, 0, 2])
print(x1[sort])
# 输出: array([2, 1, 3, 4])

方法二:结合searchsorted与argsort

如果数组元素是有序范围的数值,也可以用searchsorted快速定位元素位置,再结合x1的排序索引得到结果:

def find_permutation_vectorized(x1, x2):
    sorter_x1 = np.argsort(x1)
    sorted_x1 = x1[sorter_x1]
    # 找到x2元素在排序后x1中的位置,再映射回原索引
    pos = np.searchsorted(sorted_x1, x2)
    return sorter_x1[pos]

两种方法均为纯向量化实现,对于大规模数组的处理效率远高于循环版本,且能准确满足需求。

内容的提问来源于stack exchange,提问作者W. K. Black

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:42:49