这是一个概念性的问题,而不是一个特定的代码问题。我们正在研究优化python代码中一些较低级别的“核心”类。目前有一个类基本上存储了一个功能字典,以及每个功能的排序列表。需要注意的是,该特性所代表的可以是任何数据类型。你知道吗
示例:blah = BasicClass()
print blah.data
>> {'a': [(1, 'foo'), (2, 'bar'), (10, 'baz')],
'b': [(100, -133231), (236, -99594)],
'c': [(27, [1,2]), (35, [1,2,3,4])]}
此类主要是实用函数,用于在给定条件下查找数据字段中的值。你知道吗
方法如下:
获取(feat,val)后的第一个\u值-给定一个特征和一些数字,在data[feat]中找到索引为>;val的第一个条目
获取\u范围内的\u值(feat,start,end)-给定一个范围,查找数据[feat]中索引在start和end之间的所有部分
以此类推。你知道吗
我正在考虑优化这个类,使其尽可能地提高性能,因为它在我们的许多堆栈中都会被调用。我一直在考虑合并C,因为从理论上讲,这会带来一些好处,但似乎有很多方法可以扩展到C,我不确定该走哪条路。你知道吗
在我的脑海里:Ctypes函数-在C中创建函数,不引用python头文件。一切都将使用本机c,并通过ctypes.CDLL文件打电话。希望python在传入之前进行ctype转换。
C函数模块-创建一个使用pythons C API并正确返回PyObjects的助手函数模块。然后在上面的类中,我将只生成传递给c模块函数的方法
def get_first_val_after(self, feat, val):
return get_first_val_after_c(self.data[feat], val)
用C重写整个类—这将允许我们的底层数据结构是本机C,并且函数可能会更快。
我有一点1和2的经验,但我从来没有做过3之前,我希望有人能够给我的见解,其中可能会产生最好的结果。你知道吗
先谢谢你。你知道吗
编辑:如下所述,我们目前对整个文件进行了cythonize。我想测试是否扩展到C本身会产生更好的结果。你知道吗