Skip to main content
 首页 » 编程设计

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

2025年05月04日9三少

我在根据给定的转换表转换 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]