我在根据给定的转换表转换 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] 值?如果要处理几千帧,循环会花费太多时间。
请您参考如下方法:
如果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]
