Skip to main content
 首页 » 编程设计

python之给定置换数组,找到置换

2025年05月04日19davidwang456

我有两个 numpy 整数数组,

import numpy 
 
a = numpy.array([1, 3, 5, 0]) 
b = numpy.array([3, 5, 0, 1]) 

我知道它们是彼此的排列。我怎样才能找到排列,即整数数组 i 这样

a[i] == b 

?对整个数组进行比较的显式 for 循环有效,但似乎效率低下。

如果它对行数组的排列有效,则加分

import numpy 
 
a = numpy.array([ 
   [1, 2], 
   [3, 7], 
   [5, 12], 
   [0, 4], 
   # ... 
]) 
b = numpy.array([ 
   [3, 7], 
   [5, 12], 
   [0, 4],  
   [1, 2], 
   # ... 
]) 

请您参考如下方法:

这是一个使用 argsort 两次的方法。它似乎比@Divakar 的快了几个百分点:

from simple_benchmark import BenchmarkBuilder, MultiArgument 
import numpy as np 
 
B = BenchmarkBuilder() 
 
@B.add_function() 
def div(A,B): 
    sidx = A.argsort() 
    return sidx[np.searchsorted(A,B,sorter=sidx)] 
 
@B.add_function() 
def pp(A,B): 
    oa,ob = (x.argsort() for x in (A,B)) 
    o = np.empty_like(oa) 
    o[ob] = oa 
    return o 
 
@B.add_arguments('array size') 
def argument_provider(): 
    for exp in range(8, 30): 
        dim_size = int(1.4**exp) 
        a = np.random.permutation(dim_size) 
        b = np.random.permutation(dim_size) 
        yield dim_size, MultiArgument([a,b]) 
 
r = B.run() 
r.plot() 
 
import pylab 
pylab.savefig('bm.png')