選課系統OCR之玄學debuff(2)
根據新的profile結果,現在最大的性能坑就是比較矩陣相似度……(我突然覺得這個演算法很低效……但是我明天再想這個問題往後更,今天先寫點trick)
嗯最開始的時候,有一個函數DiffSqrt(見這裡),這玩意看起來實現有點奇怪……嗯先profile一下
嗯可見DiffSqrt是Fitsize函數的2.6x時間……因為這倆函數調用次數是基本成固定比例的-,-所以暫時就用Fitsize當性能標準好了
嗯……先把原來那個坑爹實現改改,這個函數本來是計算矩陣相同元素的數量以及矩陣的大小的(話說我當初怎麼搞的這麼扭曲的實現……),嗯那乾脆就用numpy內置的函數就好了喵~矩陣數組數量有自帶的numpy.ndarray.size,相同元素直接bool運算以後求和就好了……反正True == 1,於是就有了……這個
def DiffSqrt(Mat1, Mat2):ntif Mat1.shape != Mat2.shape:nttreturn 0.0ntD = (Mat1 == Mat2).sum()ntJ = Mat1.sizentreturn float(D)/J, Jn
profile一下,看起來還不錯嘛……只有1.6x Fitsize開銷了的說~
但是……ちょっと待って……我好像看見有人說 .sum的效率不如 .count_nonzero來著……是真的嗎
你看看人家生化PhD
好的現在代碼就變成了這樣
def DiffSqrt(Mat1, Mat2):ntassert Mat1.shape == Mat2.shapentD = numpy.count_nonzero(Mat1 == Mat2)ntJ = Mat1.sizentreturn float(D)/J, Jn
煮認為這是好的,於是把它同步到了github上 https://github.com/Everything-in-NKU/NKU-SSS-OCR
明天再試試怎麼改演算法……我總覺得現在這個匹配演算法不太有效率但是又不知道怎麼辦【望天】
推薦閱讀:
※python多進程進程間通信疑問,求大神指教?(主進程獲取不到子進程變數)
※深度學習中的Python語言1:Python基礎數據類型、容器、函數和類的介紹
※Python練習第四題,批量修改圖片解析度
TAG:Python |