標籤:

選課系統OCR之玄學debuff(2)

啊為什麼我又要寫個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

消耗時間從變成了1.15x Fitsize了……所以……這個函數真的有坑……吧

好的現在代碼就變成了這樣

def DiffSqrt(Mat1, Mat2):ntassert Mat1.shape == Mat2.shapentD = numpy.count_nonzero(Mat1 == Mat2)ntJ = Mat1.sizentreturn float(D)/J, Jn

煮認為這是好的,於是把它同步到了github上 github.com/Everything-i

明天再試試怎麼改演算法……我總覺得現在這個匹配演算法不太有效率但是又不知道怎麼辦【望天】

推薦閱讀:

python多進程進程間通信疑問,求大神指教?(主進程獲取不到子進程變數)
深度學習中的Python語言1:Python基礎數據類型、容器、函數和類的介紹
Python練習第四題,批量修改圖片解析度

TAG:Python |