我有两个 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')
关于python - 给定置换数组,找到置换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57184214/