映射数字值



假设我有一个NumPy数组:

x = np.array([[0, 5],
[1, 6],
[4, 3],
[2, 4],
[3, 2]])

还有一个"查找"数组,它告诉我如何将一个整数(第一列(映射到另一个整数(第二列(:

lookup = np.array([[0, 50],
[1, 16],
[2, 47],

所以,0 -> 501 -> 162 -> 47。请注意,整数[3, 4, 5, 6]不在查找中,因此不需要更改。一个简单的方法是:

for i in range(lookup.shape[0]):
num = lookup[i, 0]
x[x == num] = lookup[i, 1]

预期输出应为:

np.array([[50, 5],
[16, 6],
[4, 3],
[47, 4],
[3, 47]])

对于大型 2D 数组x和更大的lookup,有没有更有效的方法在 NumPy 中以矢量化方式做到这一点?

对于x不包含负整数或大整数的情况,我的方法:

a = np.arange(x.max()+1)
a[lookup[:,0]] = lookup[:,1]
x = a[x]

希望这有帮助!

x = np.array([[0, 5],
[1, 6],
[4, 3],
[2, 4],
[3, 2]])
lookup = np.array([[0, 50],
[1, 16],
[2, 47]])
# building a dictionary
lookup = {each[0]:each[1] for each in lookup}
vfunc = np.vectorize(lambda x: lookup.get(x, x))
vfunc(x) # gives your result

输出

array([[50,  5],
[16,  6],
[ 4,  3],
[47,  4],
[ 3, 47]])

最新更新