不同的編程語(yǔ)言,會(huì)有不同 的緩存策略,例如,通過(guò)哈希映射、優(yōu)先級(jí)隊(duì)列等實(shí)現(xiàn)緩存。因此,不同的編程語(yǔ)言,在緩存的解決方案方面具有很大差異,可能需要幾分鐘,也可能需要幾小時(shí)。
石樓網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),石樓網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為石樓1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的石樓做網(wǎng)站的公司定做!
但是,在Python中,標(biāo)準(zhǔn)工具包functools實(shí)現(xiàn)了一種名為L(zhǎng)RU(Least Recently Used)的緩存策略,可以通過(guò)傳入?yún)?shù),來(lái)設(shè)定緩存最近多少次的計(jì)算結(jié)果,如果傳入?yún)?shù)為None,那么則不緩存。
你好,你可以考慮使用numpy的函數(shù)來(lái)做,下面是例子的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]
你把上面的那個(gè)image的數(shù)值改成你需要改的目標(biāo)就可以直接替換了。
1. 在動(dòng)手優(yōu)化之前,先profile看看,程序時(shí)間都花在哪些地方了:
python -m cProfile -o output.prof your_program
跑完之后,會(huì)生成一個(gè)output.profile文件。接下來(lái)需要對(duì)這個(gè)文件進(jìn)行分析,這方面的工具我推薦SnakeViz,神器。安裝非常簡(jiǎn)單,pip install snakeviz 即可。
snakeviz output.prof
運(yùn)行之后,會(huì)打開(kāi)一個(gè)瀏覽器窗口,好好看看,哪些函數(shù)耗時(shí)最多,耗時(shí)是因?yàn)檎{(diào)用次數(shù)太多呢,還是因?yàn)閱未握{(diào)用耗時(shí)長(zhǎng),明確優(yōu)化重點(diǎn);
2. 減少重復(fù)計(jì)算,緩存計(jì)算結(jié)果??纯?functools.lru_cache。
3. 能用list comprehension的地方,不要用for;能用numpy的地方,不要手寫循環(huán),不要用pandas;
4. 看你的回測(cè),40w個(gè)tick的話,數(shù)據(jù)量不算大,應(yīng)該是直接load到內(nèi)存里的吧?
5. 還是慢的話,上Numba — Numba,就是安裝麻煩一些,使用起來(lái)非常方便,速度提高一兩個(gè)數(shù)量級(jí)沒(méi)問(wèn)題;
6. 如果你用的包PyPy都支持的話,試試pypy;
7. Cython、c module,上面的都沒(méi)效果的話,這個(gè)是最后的候選方案了。