numpy 数组之间的交叉引用

Odi*_*ana 6 python numpy

我有一个 id 的一维数组,例如:

a = [1, 3, 4, 7, 9]
Run Code Online (Sandbox Code Playgroud)

然后是另一个二维数组:

b = [[1, 4, 7, 9], [3, 7, 9, 1]]
Run Code Online (Sandbox Code Playgroud)

我想要一个与 b 形状相同的第三个数组,其中每个项目都是 a 中相应项目的索引,即:

c = [[0, 2, 3, 4], [1, 3, 4, 0]]
Run Code Online (Sandbox Code Playgroud)

使用 numpy 执行此操作的矢量化方法是什么?

way*_*iki 1

实际上,这个解决方案是一个单行本。唯一的问题是,您需要在执行单行之前重新调整数组的形状,然后再次重新调整形状:

import numpy as np

a = np.array([1, 3, 4, 7, 9])
b = np.array([[1, 4, 7, 9], [3, 7, 9, 1]])
original_shape = b.shape

c = np.where(b.reshape(b.size, 1) == a)[1]

c = c.reshape(original_shape)
Run Code Online (Sandbox Code Playgroud)

结果是:

[[0 2 3 4]
 [1 3 4 0]]
Run Code Online (Sandbox Code Playgroud)