向量化 - 傳統累加運算 - **實現:
import time
import numpy as np
# 定義兩組向量
vector1 = np.random.rand(
100000
)vector2 = np.random.rand(
100000
)# 使用向量化
start_time = time.time(
)# 開始時間
res = np.dot(vector1, vector2)
# 向量直接相乘得到最終結果
end_time = time.time(
)# 結束時間
print
("vectorized: "
+str
((end_time - start_time)
*1000)+
"ms"
+" res ="
+str
(res)
)# 使用for迴圈
res =
0start_time = time.time(
)# 開始時間
for i in
range
(100000):
# 傳統的累加運算,需要累加100000次
res += vector1[i]
* vector2[i]
end_time = time.time(
)# 結束時間
print
("for loop: "
+str
((end_time - start_time)
*1000)+
"ms"
+" res ="
+str
(res)
)
結果對比:vectorized :
1.0001659393310547ms res =
24969.775960643143
for loop:
79.94818687438965ms res =
24969.775960642968
從執行結果來看向量化的運算速度要比非向量化的運算快了近80倍,而這個對比結果還會隨著運算集的數目增加而增加。
為什麼:
cpu 與 gpu 都能夠使用 simd 指令進行並行化操作,即以同步方式,在同一時間內執行同一條指令。一般來講可擴充套件的深度學習都在 gpu 上做,但其實 cpu 也不是太差,只是沒有 gpu 擅長。
而 python 的 numpy 的一些內建函式能夠充分利用並行化來加速運算,比如 np.dot,因此,不到逼不得已,還是不要使用 for 迴圈吧
ps: gpu - 圖形處理器也,叫做影象處理單元,顯示卡的處理器。與 cpu 類似,只不過 gpu 是專為執行複雜的數學和幾何計算而設計的,這些計算是圖形渲染所必需的。
simd - 單指令多資料流,以同步方式,在同一時間內執行同一條指令。
機器學習 numpy向量化程式設計
numpy 提供了專門的矩陣資料結構和線性代數庫,完全實現了向量化程式設計 import numpy as np from numpy import mylist 1,2,3,4,5 a 10 mymatrix np.mat mylist print a mymatrix 輸出結果為 10 20 3...
文字向量化
table of contents概述 word2vec nnlm c wcbow and skip gram doc2vec str2vec 文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的...
文字向量化
文字向量化,就是把文字轉化為向量形式。這裡用兩種方式實現本文向量,一種是tf方式,一種是tf idf方式,且這裡向量的長度就是字典的長度。計算兩個向量余弦相似度import math defcount cos similarity vec 1,vec 2 if len vec 1 len vec 2...