numpy:从另一个表中查找所有出现的元素

时间:2013-06-29 10:58:20

标签: python arrays numpy matrix-indexing

我有一个根据给定的转换表在numpy数组中转换元素的问题。假设我有一个2D翻译表trTab,例如

import numpy as np
trTab = np.array([[0, 1, 2, 3 ,4, 5,
                  [5, 2, 3, 1, 0, 4]])

其中trTab[0, :]包含所有可能的ID(整数),而trTab[1, :]的翻译将在以后使用。 trTab两行中的ID都是唯一的。然后我需要翻译一个帧numpy数组的第一列中的所有id,比如说

frame = np.array([[0, ...],
                  [3, ...],
                  [5, ...],
                  [1, ...]])

这样它现在等于[[5, ...], [1, ...], [4, ...], [2, ...]],即0->53->15->41->2

frame可以有不同的行数,实际上我需要翻译一长串的帧。 frame 0列中的ID不必按顺序排列,并且不需要使用所有可能的ID。

是否有任何简单快速的方法可以根据给定的trTab转换每个此类帧数组,而不是简单地循环所有fr[:, 0]值?在需要处理几千帧的情况下,循环需要花费太多时间。

2 个答案:

答案 0 :(得分:1)

如果trTab第一行和frame第一列始终是数字,您可以执行以下操作:

import numpy as np
from numpy import subtract as s
fancy_indices = np.absolute(s.outer(frame[:,0],trTab[0,:])).argmin(axis=1)
frame[:,0] = trTab[1,:][fancy_indices]

答案 1 :(得分:0)

为什么不使用字典?

dic={0:5,1:2,2:3,3:1,4:0,5:4}
frame= np.array([[0,1],[3,2],[5,3],[1,4]])
frame[:,0]=[dic[x] for x in frame[:,0]]