使用 look-up-table 行为将两个 NumPy 数组混合为一个

Mix two NumPy arrays to one with look-up-table behavior

我遇到以下问题: 我想使用 NumPy 在 Python 中混合两个数组。我在下面做了一个小例子来展示我想要的东西。

arr1 = np.array([0,1,2,1,0,2])

我想做的是使用 arr2 作为查找-table,根据 arr2 中的相关性,根据给定的输入值分配输出值。

arr2 = np.array([[0,1,2,5,6],
                 [7,6,4,8,2]])

所以来自“lookup-table”arr2 的匹配是:

0 --> 7
1 --> 6
2 --> 4
5 --> 8
6 --> 2

编辑:arr2 的第一行总是递增,但没有恒定的步长。

最后,我想将这个 lookup-table 应用到我给定的输入数组 arr1。这意味着,我的目标是获得:

arr3 = np.array([[0,1,2,1,0,2],
                 [7,6,4,6,7,4]])

重要的是,arr1 具有任意长度,而 arr2 只有最小必要长度,可以直接将输入值分配给输出值。

有没有什么非常有效的方法可以使用 NumPy 来进行这种匹配,而无需使用遍历所有值的普通 for 循环?

提前致谢。

数组已经排序并具有唯一值使它更简单一些。

_, x_idx = np.unique(arr1, return_inverse=True)
np.take(arr2[1,:], x_idx) #or
arr2[1,:][x_idx]

这会在 x_idx 中的查找表中找到值的索引,然后使用花哨的索引来应用查找。