中英文對照
矢量化 vectorization
不同的算法的時間復雜度有著一定的區(qū)別撒会,我們更需要寫出時間復雜度更低的算法,以此來提高我們的代碼的運行效率师妙。
矢量化編程或者向量化編程是提高算法速度的一種方法诵肛。為了提升特定數值運算操作(如矩陣相乘、矩陣相加默穴、矩陣-向量乘法等)的速度怔檩,數值計算和并行計算的研究人員已經努力了幾十年。矢量化編程的思想就是盡量使用這些被高度優(yōu)化的數值運算操作來實現(xiàn)我們的學習算法蓄诽。
第二段程序代碼不僅簡單薛训,而且運行速度更快。
通常若专,一個編寫Matlab/Octave程序的訣竅是:
代碼中盡可能避免顯式的for循環(huán)许蓖。
上面的第一段代碼使用了一個顯式的for循環(huán)。通過不使用for循環(huán)實現(xiàn)相同功能调衰,可以顯著提升運行速度膊爪。對Matlab/Octave代碼進行矢量化的工作很大一部分集中在避免使用for循環(huán)上,因為這可以使得Matlab/Octave更多地利用代碼中的并行性嚎莉,同時其解釋器的計算開銷更小米酬。
關于編寫代碼的策略,開始時你會覺得矢量化代碼更難編寫趋箩、閱讀和調試赃额,但你需要在編碼和調試的便捷性與運行時間之間做個權衡。因此叫确,剛開始編寫程序的時候跳芳,你可能會選擇不使用太多矢量化技巧來實現(xiàn)你的算法,并驗證它是否正確(可能只在一個小問題上驗證)竹勉。在確定它正確后飞盆,你可以每次只矢量化一小段代碼,并在這段代碼之后暫停,以驗證矢量化后的代碼計算結果和之前是否相同吓歇。最后孽水,你會有望得到一份正確的、經過調試的城看、矢量化且有效率的代碼女气。
一旦對矢量化常見的方法和技巧熟悉后,你將會發(fā)現(xiàn)對代碼進行矢量化通常并不太費勁测柠。矢量化可以使你的代碼運行的更快炼鞠,而且在某些情況下,還簡化了你的代碼轰胁。