Python中的向量化編程
在Andrew Ng的>課程中,多次強調了使用向量化的形式進行編碼,在深度學習課程中,甚至給出了編程原則:儘可能避免使用for循環而採用向量化形式。該課程採用的是matlab/octave語言,所擅長的方向正是數值計算,語言本身內置了對矩陣/向量的支持,比如:
如果變數x是一個數值,那麼a也會得到一個數值結果,如果x是一個矩陣,那麼結果a也是一個矩陣。
但是對於機器學習領域廣為使用的python語言而言,並沒有內置這樣的功能,畢竟python是一門通用語言。好消息是,藉助一些第三方庫,我們也可以很容易的處理向量數值運算。
Numpy是Numerical Python的縮寫,是Python生態系統中高性能科學計算和數據分析所需的基礎軟體包。 它是幾乎所有高級工具(如Pandas和scikit-learn)的基礎。TensorFlow使用NumPy數組作為基礎構建模塊,在這些模塊的基礎上,他們為深度學習任務(大量進行長列表/向量/數值矩陣的線性代數運算)構建了張量對象和圖形流。
許多Numpy運算都是用C實現的,相比Python中的循環,速度上有明顯優勢。所以採用向量化編程,而不是普通的Python循環,最大的優點是提升性能。另外相比Python循環嵌套,採用向量化的代碼顯得更加簡潔。
下面就用一些簡單的示例進行說明:
在我的電腦上運行結果如下:
可見,向量化的實現代碼速度上有飛速提升,而且代碼也看起來更簡潔。
總之,無論你有多長的數據列表並需要對它們進行數學轉換,都強烈考慮將這些Python數據結構(列表或元組或字典)轉換為numpy.ndarray對象並使用固有的矢量化功能。
※用Python爬蟲獲取自己感興趣的博客文章
※python3+dlib人臉識別及情緒分析
TAG:Python |