使用 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
中的查找表中找到值的索引,然后使用花哨的索引来应用查找。
我遇到以下问题: 我想使用 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
中的查找表中找到值的索引,然后使用花哨的索引来应用查找。