機器學習014 Python中的向量化程式設計

2021-10-09 01:16:29 字數 2103 閱讀 2004

我們推薦使用向量化的形式進行編碼,盡可能避免使用for迴圈而採用向量化形式。

對於機器學習領域廣為使用的python語言而言,沒有內建對於矩陣、向量的支援,畢竟python是一門通用語言。但是,借助一些第三方庫(數值線性代數庫)如下面的numpy,我們也可以很容易的處理向量數值運算。

numpy是numerical python的縮寫,是python生態系統中高效能科學計算和資料分析所需的基礎軟體包。 它是幾乎所有高階工具(如pandas和scikit-learn)的基礎。tensorflow使用numpy陣列作為基礎構建模組,在這些模組的基礎上,他們為深度學習任務(大量進行長列表/向量/數值矩陣的線性代數運算)構建了張量物件和圖形流。

許多numpy運算都是用c實現的,相比python中的迴圈,速度上有明顯優勢。所以採用向量化程式設計,而不是普通的python迴圈,最大的優點是提公升效能。另外相比python迴圈巢狀,採用向量化的**顯得更加簡潔。

1)例1:進行乙個兩個一位陣列的點積計算:

# -*- coding: utf-8 -*

import time

import numpy as np

a = np.random.rand(

100000

)# rand(x): 生成乙個1行100000列的矩陣

b = np.random.rand(

100000

)tima = time.time(

)c = np.dot(a, b)

# dot:如果是一維矩陣/一位陣列,那麼就是點積,如果是多維,就是矩陣相乘

timb = time.time(

)print

("c : %f"

% c)

print

("vectorized version : "

+str

(1000

*(timb-tima)))

# 使用numpy內建的線性代數函式來進行向量化計算

c =0.0

tima = time.time(

)for i in

range

(100000):

c += a[i]

*b[i]

timb = time.time(

)print

("c : %f"

% c)

print

("for loop : "

+str

(1000

*(timb-tima)))

# 使用for迴圈進行數值計算

執行結果:

c :

25016.909886

vectorized version :

1.0001659393310547

c :25016.909886

for loop :

133.00776481628418

可見,向量化的實現**速度上有飛速提公升,而且**也看起來更簡潔。

總之,無論你有多長的資料列表並需要對它們進行數學轉換,都強烈考慮將這些python資料結構(列表或元組或字典)轉換為numpy.ndarray物件並使用固有的向量化功能。

2)例2:梯度下降的同步更新規則

假設n=2,那麼梯度下降的同步更新規則就要求三個引數進行同步的計算,即中間的時間間隔極短,那麼可以使用向量化的計算來使得時間消耗高度減短。

將三個引數看成乙個向量,將阿爾法後面的部分看成乙個向量delta。就可以將這三個式子簡化成一行的向量(不同維度)上的運算,即:

相應的python的實現:待完成…

python學習014 正則

python正規表示式基礎 正規表示式,又稱規則表示式 英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。使用場景 在python中使用正則需要匯入re包 import re首先...

python機器 python機器學習

熱詞系列 打卡 mark一下,以後看 每天打卡學習 1 python 基礎 bv1lt4y1u7un 2 python 高階 bv1jz411b7dh 3 python 資料庫 bv1pg4y1a7a7 4 python gui與坦克大戰 bv1je411f72o 5 python numpy bv...

python機器學習

在sklearn庫中的load itis包含著鳶尾花分類的所有資料 呼叫load iris函式載入資料 import mglearn import numpy as np from sklearn.datasets import load iris import pandas as pd from ...