鉴于讨论与关于绩效的讨论不同 networkx 为了存储“几乎”完整图形的最佳方式,我将集中精力总结使用元组而不是使用元组的基本原理 frozenset 暂时键入字典键。
networkx
frozenset
我试图找到一个确认,但给出了更多的方法 frozenset 可以比元组占用更多的内存。从 这个问题 我了解到哈希算法已经重新实现,这有助于字典插入和查找的性能(在路上获取密钥的哈希值),但另一方面,Python针对元组,列表和各种长度的字符串进行了大量优化,这使得我想知道2元组是否还不快 frozenset 如果只是因为这个原因。
现在,当我们考虑 NumPy 数组 - 他们可能更好地完成任务的原因是多方面的:
NumPy
在您的情况下,您似乎需要存储2个值 - 一个 float 一个 int 。你可以分配2个2-dim ndarray s - 其中之一 int 和其中之一 float32 类型。您可以对角填充数组并创建一个特殊的访问器方法(可以检查两个索引的顺序 - 这可能会更慢)或填写两个索引(例如:1,2和2,1)。
float
int
ndarray
float32
我假设你不需要两个值因此解耦 int 和 float32 对于使用各自值的算法的性能,这些值实际上是有益的。消耗的内存 ndarray s应该更小并且索引的连续处理比在字典中相当随机地跳转到存储器的情况下快得多。