2

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

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

wheretrTab[0, :]保存所有可能的 ids(整数),而trTab[1, :]它们的翻译将在以后使用。两行中的 idtrTab都是唯一的。然后我需要翻译一个框架numpy数组的第一列中的所有id,比如

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

所以它现在等于[[5, ...], [1, ...], [4, ...], [2, ...]], 即0->5, 3->1,5->41->2.

frame可以是不同的行数,实际上我需要翻译很长的帧序列。第frame0 列中的 id 不必按顺序排列,也不必使用所有可能的 id。

是否有任何简单快速的方法可以根据给定的trTab而不是通过简单循环所有fr[:, 0]值来转换每个这样的帧数组?如果要处理几千帧,循环会花费太多时间。

4

2 回答 2

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]
于 2013-06-29T11:18:46.760 回答
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]]
于 2013-06-29T13:05:31.670 回答