不同的编程语言,会有不同 的缓存策略,例如,通过哈希映射、优先级队列等实现缓存。因此,不同的编程语言,在缓存的解决方案方面具有很大差异,可能需要几分钟,也可能需要几小时。
石楼网站建设公司创新互联,石楼网站设计制作,有大型网站制作公司丰富经验。已为石楼1000+提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的石楼做网站的公司定做!
但是,在Python中,标准工具包functools实现了一种名为LRU(Least Recently Used)的缓存策略,可以通过传入参数,来设定缓存最近多少次的计算结果,如果传入参数为None,那么则不缓存。
你好,你可以考虑使用numpy的函数来做,下面是例子的python代码
image = np.zeros((400,400,3), dtype="uint8")
raw = image.copy()
image[np.where((image==[0,0,0]).all(axis=2))] = [255,255,255]
cv2.imshow('Test0', image)
lower_black = np.array([0,0,0], dtype = "uint16")
upper_black = np.array([70,70,70], dtype = "uint16")
black_mask = cv2.inRange(image, lower_black, upper_black)
image[np.where((image == [0,0,0]).all(axis = 2))] = [155,255,155]
black_mask[np.where(black_mask == [0])] = [155]
你把上面的那个image的数值改成你需要改的目标就可以直接替换了。
1. 在动手优化之前,先profile看看,程序时间都花在哪些地方了:
python -m cProfile -o output.prof your_program
跑完之后,会生成一个output.profile文件。接下来需要对这个文件进行分析,这方面的工具我推荐SnakeViz,神器。安装非常简单,pip install snakeviz 即可。
snakeviz output.prof
运行之后,会打开一个浏览器窗口,好好看看,哪些函数耗时最多,耗时是因为调用次数太多呢,还是因为单次调用耗时长,明确优化重点;
2. 减少重复计算,缓存计算结果。看看 functools.lru_cache。
3. 能用list comprehension的地方,不要用for;能用numpy的地方,不要手写循环,不要用pandas;
4. 看你的回测,40w个tick的话,数据量不算大,应该是直接load到内存里的吧?
5. 还是慢的话,上Numba — Numba,就是安装麻烦一些,使用起来非常方便,速度提高一两个数量级没问题;
6. 如果你用的包PyPy都支持的话,试试pypy;
7. Cython、c module,上面的都没效果的话,这个是最后的候选方案了。