【发布时间】:2011-07-24 18:42:40
【问题描述】:
我正在编写自己的稀疏(一维)数组类,但遇到了一些性能问题。分析表明瓶颈之一是我的__getitem__ 和__setitem__ 实现,特别是,似乎罪魁祸首之一可能是我对isinstance 的使用。目前,我在__getitem__ 中有 5 次调用 isinstance,我从 cProfile 中获得以下数据(摘录):
我的__getitem__ 实现了切片和数组访问,所以我怀疑某种类型的自省是必要的......但我想知道@987654327 @真的是最好的方法吗?
另一方面,我的__setitem__ 不支持切片(无论如何只调用一次isinstance),所以我不知道如何让它更快。每行分析数据如下:
Line # Hits Time Per Hit % Time Line Contents
==============================================================
108 @profile
109 def __setitem__(self, key, value):
110 88705 121012 1.4 23.0 if not isinstance(key, int):
111 raise TypeError('list indices must be be integers')
112
113 88705 95905 1.1 18.3 if key >= self._length:
114 raise IndexError('list index out of range')
115
116 88705 85328 1.0 16.2 if key < 0:
117 key = self._length + key
118
119 88705 89186 1.0 17.0 if value == self._default:
120 35043 37087 1.1 7.1 if key in self._entries:
121 35042 39359 1.1 7.5 del self._entries[key]
122 else:
123 53662 57527 1.1 10.9 self._entries[key] = value
(我也愿意接受建议使用合适的快速稀疏数组 Python 模块的答案。我的要求之一是能够仅快速迭代非零条目的(键)。)
【问题讨论】:
标签: python optimization