性能测试Python数据结构决策



我经常遇到这种情况,我永远无法做出明确的决定。因此,我希望有人能解释如何"测试"简单的设计决策,以及在这种情况下什么会更好。

我需要一个数据结构,它存储与"类别"相对应的"边缘ID"one_answers"边缘权重"。

我可以用两种方式存储:

a) 每个类别的(edgeid,weight)对。

{
cat1: [(3,4),(5,7),(6,9)...]
cat2: [(4,1),(3,6),(7,8)...]
}

b) 每个cat1对应的weight和edgeid的单独列表,索引相互关联。

{
cat1: [[3,5,6...],[4,7,9...]]
cat2: [[4,3,7...],[1,6,8...]]
}

操作:

  1. 将一对(边、重)添加到某个类别中。这将涉及在(a)中简单地将元组附加到cat1列表,并在(b)中对cat1巨列表内的两个列表进行单独的附加操作。

  2. 获取与列表(!最重要的!)对应的所有边

  3. 删除边(当然是按值)和相应的重量。

我如何才能在这里做出明智的决定?我将在igraph中使用它,因此我的图可以涉及数亿个节点,因此上面的列表可能非常长,这就是为什么我试图在这里记住性能。

除了逻辑推导或从过去的知识中得出结论外,我如何在Python中快速测试这些小事的性能?我很想举个例子。

如果您正在寻找性能,我建议您使用numpy。使用元组和列表的速度很慢,numpy实际上可以处理数据结构。你要找的是这样的东西:

    import numpy as np
    myarray = np.zeros(desiredsizeandshape,dtype = [('edge',list),('weight',list)])

现在,您将能够根据边还是权重来填充数组。例如,假设我有一个5乘5的数组:

   myarray[0,4]['edge'] = 1
   myarray[0,4]['weight'] = 5

然后,如果只需要边的数组,只需键入:myarray[边缘]

你会得到一个边值的数组。

最新更新