任何算法的時間複雜度對於決定應用程序是否可靠都非常重要。在應用實時輸出時,盡可能快地運行大型算法非常重要。為了做到這一點,Python 有幾個標準的數學函數,用於快速對整個數據數組執行操作,而無需編寫循環。 numpy 就是其中一個包含此類函數的庫。讓我們看看我們如何在向量化的情況下使用這個標準函數。
什麼是向量化?
向量化用於在不使用循環的情況下加速 Python 代碼。使用這樣的函數可以幫助最小化代碼執行時間。對向量執行各種操作,例如向量的點積,也稱為點積,因為它產生單個輸出,結果的外積在方形測量矩陣中。等於向量長度的長度X,乘以一個元素,產生乘積。索引的元素和矩陣的維度保持不變。
我們將看看經典方法如何比普通函數花費更長的時間,計算它們的處理時間。
outer (a, b):計算兩個向量的外積。
multiply (a, b): 兩個數組的矩陣乘積。
dot (a, b): 兩個數組的點乘。
零((n, m)):返回一個給定形狀和類型的矩陣,用零填充。
process_time (): 返回當前進程的系統和用戶CPU時間之和的值(以秒為單位)。它不包括睡眠期間經過的時間。
點積:
點積 —它是一種代數運算,其中兩個相等長度的向量相乘以產生一個數字。點積通常被稱為內積 。這個產品產生一個標量數。讓我們考慮兩個相同長度的矩陣a和b,通過轉置第一個矩陣進行點積,然後進行乘法由a '(轉置a)和b,對數學矩陣進行分解,如下圖所示。
視覺表示點積 —

下面是 Python 代碼:
# 點積
導入
時間
導入
numpy
import
array
# 8 bytes int
a
=
array.array (
`q`
)
for
i
in
range
(
100000
):
a.append (i);
b
=
數組。數組(
`q`
)
for
i
in
range
(
100000
,
200000
):
b.append (i)
# 經典點積實現向量
tic
=
時間。process_time ()
點
=
0.0
;
for
i
in
range
(
len
(a)):
dot
+
=
a [i]
*
b [i]
toc
=
時間。process_time ()
print
(
"dot_product="
+
str
(dot));
print
(
"計算時間="
+
str
(
1000
*
(toc
-
tic))
+
"ms"
) 代碼>
n_tic
=
時間.process_time ()
n_dot_product
=
numpy.dot (a, b)
n_toc
=
時間。process_time ()
print
(
"n_dot_product ="
+
str
(n_dot_product))
print
(
"計算時間="
+
str
(
1000
*
(n_toc
-
n_tic))
+
"ms"
)
退出:
dot_product = 833323333350000.0 計算時間 = 35.59449199999999ms n_dot_p產品 = 833323333350000 計算時間 = 0.1559900000000225ms
戶外產品:
兩個坐標向量的張量積稱為 外部工作 。考慮兩個向量 a 和 b 維度為 nx 1
和 mx 1
然後向量的外積導致一個矩形矩陣 nxm
。如果兩個向量的維數相同,那麼得到的矩陣就是方陣,如圖。
外積—的可視化表示

下面是 Python 代碼:
退出: outer_product = [[0. 0. 0. ... , 0. 0. 0.] [200.201.202. ... , 397. 398. 399.] [400. 402. 404. ... , 794. 796. 798.] ..., [39400. 39597. 39794. ... , 78209. 78406. 78603. ] [39600. 39798. 39996. ... , 78606. 78804. 79002.] [39800. 39999. 40198. ... , 79202. 79401.]] 計算時間 = 39.821617ms ..., 794 79 6 798] ..., [39400 39597 39794 ..., 78209 78406 78603] [39600 39798 39996 ..., 78606 78804 79002] [39800 39999 40198 ..., 79003 7903]1]計算時間 = 0.2809480000000031ms 元素乘積: wise product Element — 的可視化表示 ![]() 下面是 Python 代碼:
|
退出:
< Pre>元素Wise產品= [0.00000000E + 00 5.00010000E + 04 1.00004000E + 05 ...,4.99955001E + 09 4.9997000000 + 09 4.99985000E + 09]計算時間= 23.516678000000013MS元素WISE產品= [0 50001 100004。 .. , 704582713 704732708 704882705] 計算時間 = 0.2250640000000248ms