Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Cython-Python列表的高效选项_Python 3.x_List_Parallel Processing_Cython_Gil - Fatal编程技术网

Python 3.x Cython-Python列表的高效选项

Python 3.x Cython-Python列表的高效选项,python-3.x,list,parallel-processing,cython,gil,Python 3.x,List,Parallel Processing,Cython,Gil,我在Cython.pyx代码中有两个函数,它们随时间以随机方式调用: cdef double dirac(self,Py_ssize_t i)nogil: cdef Py_ssize_t index with gil: if i in self.muId: index = self.muId.index(i) if self.muSpk[index] <= self.ti

我在Cython.pyx代码中有两个函数,它们随时间以随机方式调用:

cdef double dirac(self,Py_ssize_t i)nogil:
        cdef Py_ssize_t index
        with gil:
            if i in self.muId:
                index = self.muId.index(i)
                if self.muSpk[index] <= self.time[self.tInt]:
                    self.muId.pop(index)
                    self.muSpk.pop(index)
                    return 1/self.dt
                else:
                    return 0
            else:
                return 0
cdef双狄拉克(self,Py_-ssize_-ti)nogil:
cdef Py_-ssize_-t索引
与gil合作:
如果我在self.muId中:
索引=self.muId.index(i)

如果self.muSpk[index]没有完整的工作代码和附加信息,很难为您提供帮助。但是,如果列表很大,代码的问题是
in
运算符和
pop
方法的算法复杂度不好。在纯python中,使用dict可以很容易地解决这个问题,其中键是索引,值是计时(注意,标记应该是唯一的)。这将是len(muId)/2倍的平均速度!此外,我认为优先级队列在这里对您没有帮助。实际上,列表不会太大(可能小于1k),但dict不会有帮助,因为我可以在列表中重复muId。您可以使用或dict来处理重复项,因为元素是按顺序删除的。对于100~1000个元素,您应该可以获得很好的加速。如果没有完整的工作代码和附加信息,您将很难获得帮助。但是,如果列表很大,代码的问题是
in
运算符和
pop
方法的算法复杂度不好。在纯python中,使用dict可以很容易地解决这个问题,其中键是索引,值是计时(注意,标记应该是唯一的)。这将是len(muId)/2倍的平均速度!此外,我认为优先级队列在这里对您没有帮助。实际上,列表不会太大(可能小于1k),但dict不会有帮助,因为我可以在列表中重复muId。您可以使用或dict来处理重复项,因为元素是按顺序删除的。有了100~1000个元素,你应该可以获得很好的加速。
def addSpike(self,Py_ssize_t muId,double delay):
        self.muId.append(muId)
        self.muSpk.append(self.time[self.tInt] + delay)
        if self.LR < muId:
            self.LR = muId