Pythonically比较两个阵列,置换的行指数在numpy的[复制]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我有置换行两个相同大小的numpy的ndarrays:

import numpy as np
a = np.ndarray([[1,2,3],
                [4,5,6],
                [7,8,9],
                [10,11,12]])
b = np.ndarray([[7,8,9],
                [10,11,12],
                [1,2,3],
                [4,5,6]])

我想返回的每一行的索引中第一阵列相对于所述第二阵列的功能,。例如:

compare_row_indices(a,b)

将返回

[2,3,0,1] # 0-based indexing

什么是实现这一功能的最Python的方式?

python numpy
1个回答
1
投票

也许不是最好的方式,但是这似乎工作(其分解到多个步骤,方便的可视化):

>>> cmp = a[:, None] == b
>>> cmp
array([[[False, False, False],
        [False, False, False],
        [ True,  True,  True],
        [False, False, False]],

       [[False, False, False],
        [False, False, False],
        [False, False, False],
        [ True,  True,  True]],

       [[ True,  True,  True],
        [False, False, False],
        [False, False, False],
        [False, False, False]],

       [[False, False, False],
        [ True,  True,  True],
        [False, False, False],
        [False, False, False]]])
>>> eq = np.all(cmp, axis=-1)
>>> eq
array([[False, False,  True, False],
       [False, False, False,  True],
       [ True, False, False, False],
       [False,  True, False, False]])
>>> np.argwhere(eq)
array([[0, 2],
       [1, 3],
       [2, 0],
       [3, 1]])
>>> np.argwhere(eq)[:, 1]
array([2, 3, 0, 1])
© www.soinside.com 2019 - 2024. All rights reserved.