我经常遇到这种情况,我永远无法做出明确的决定。因此,我希望有人能解释如何"测试"简单的设计决策,以及在这种情况下什么会更好。
我需要一个数据结构,它存储与"类别"相对应的"边缘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...]]
}
操作:
将一对(边、重)添加到某个类别中。这将涉及在(a)中简单地将元组附加到
cat1
列表,并在(b)中对cat1
巨列表内的两个列表进行单独的附加操作。获取与列表(!最重要的!)对应的所有边
删除边(当然是按值)和相应的重量。
我如何才能在这里做出明智的决定?我将在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[边缘]
你会得到一个边值的数组。