使用Numpy数组作为查找表

2024-05-17 05:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从.csv文件中读取的二维Numpy数据数组。每一行代表一个数据点,最后一列包含一个“key”,这个key与另一个Numpy数组中的“key”唯一对应,这个数组就是“lookup table”。

将第一个表中的行与第二个表中的值进行匹配的最佳方式(最新)是什么?


Tags: 文件csv数据keynumpy方式table代表
2条回答

在特殊情况下,当索引可以从键计算时,可以避免使用字典。当可以选择查找表的键时,这是一个优势。

对于Vebjorn Ljosa的例子:

查找:

>>> lookup[a[:,0]-1, :]
array([[  1.     ,   3.14   ,   4.14   ],
       [  1.     ,   3.14   ,   4.14   ],
       [  2.     ,   2.71818,   3.7    ],
       [  3.     ,  42.     ,  43.     ]])

合并:

>>> np.hstack([a, lookup[a[:,0]-1, :]])
array([[  1.     ,  11.     ,   1.     ,   3.14   ,   4.14   ],
       [  1.     ,  12.     ,   1.     ,   3.14   ,   4.14   ],
       [  2.     ,  21.     ,   2.     ,   2.71818,   3.7    ],
       [  3.     ,  31.     ,   3.     ,  42.     ,  43.     ]])

一些示例数据:

import numpy as np

lookup = np.array([[  1.     ,   3.14   ,   4.14   ],
                   [  2.     ,   2.71818,   3.7    ],
                   [  3.     ,  42.     ,  43.     ]])

a = np.array([[ 1, 11],
              [ 1, 12],
              [ 2, 21],
              [ 3, 31]])

在查找表中从键到行号生成词典:

mapping = dict(zip(lookup[:,0], range(len(lookup))))

然后你就可以用字典来配行了。例如,如果您只想加入表:

>>> np.hstack((a, np.array([lookup[mapping[key],1:] 
                            for key in a[:,0]])))
array([[  1.     ,  11.     ,   3.14   ,   4.14   ],
       [  1.     ,  12.     ,   3.14   ,   4.14   ],
       [  2.     ,  21.     ,   2.71818,   3.7    ],
       [  3.     ,  31.     ,  42.     ,  43.     ]])    

相关问题 更多 >