我有一个根据给定的转换表在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->5
,3->1
,5->4
和1->2
。
frame
可以有不同的行数,实际上我需要翻译一长串的帧。 frame
0列中的ID不必按顺序排列,并且不需要使用所有可能的ID。
是否有任何简单快速的方法可以根据给定的trTab
转换每个此类帧数组,而不是简单地循环所有fr[:, 0]
值?在需要处理几千帧的情况下,循环需要花费太多时间。
答案 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]]