以时间有效的方式使用numpy数组作为键来检索python字典值

时间:2017-12-12 19:46:11

标签: python arrays numpy dictionary

我使用python 3.6。我有一个numpy数组让我们说a.It是这种格式

array(['0', '1', '2', ..., '3304686', '3304687', '3304688'],
      dtype='<U7')

我有另一本词典b = {1:&#39; 012&#39;,2:&#39; 023&#39;,3:&#39; 045&#39;,... 3304688: &#39; 01288&#39;}

我希望通过提供a的值作为b的键来检索b的每个值并将其存储在另一个numpy数组中。我打算以这种方式尝试

    z_array = np.array([])  

    for i in range(a.shape[0]):
        z=b[i]        
        z_array=np.append(z_array,z)

但是看一下a的形状,我觉得它会花费很多时间。 能否请你建议一些时间有效的替代方法?

1 个答案:

答案 0 :(得分:1)

您可以使用np.frompyfunc,请注意这将创建一个对象数组。

b = {str(i): i**3 for i in range(10**7)}
a = [str(i) for i in range(10**7)]
c = np.frompyfunc(b.__getitem__, 1, 1)(a)

c = np.frompyfunc(b.get, 1, 1)(a)

None表示缺少密钥。

在包含10,000,000个项目的示例中,尽可能多的查找只需要一两秒钟。 (创建ab需要更长时间)