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

标签 python arrays numpy permutation

我有两个 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 的快了几个百分点:

enter image description here

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/

相关文章:

python - GeoJson 到 TopoJSON 转换

jquery - jquery 数组中的响应式 img

java - 如何通过套接字读取/写入二维字符数组?

python - 基于唯一值的列字符串转换

Python为矩阵的下三角生成掩码

python - 获取 Pandas DataFrame 可读数据类型

python - Python 中的对象 ID

python - Pandas 更新对随后修改的附加值的更改

python - 如何在PyTorch中正确使用Numpy的FFT函数?

c - 如何将 uint8 * 转换为包含可变长度数组元素的结构? (C 编程)