我們先看乙個numpy中向量化的例子:
>>
> a = np.arange(1,
5)>>
> b = np.arange(1,
5)>>
>
print
(a,b,a+b)[1
234]
[123
4][2
468]
>>
>
print
([a[i]
+b[i]
for i in
range(4
)])[
2,4,
6,8]
>>
> c =
[x for x in
range(1
,5)]
>>
> d =
[x for x in
range(1
,5)]
>>
>
print
(c,d,c+d)[1
,2,3
,4][
1,2,
3,4]
[1,2
,3,4
,1,2
,3,4
]>>
>
print
([c[i]
+d[i]
for i in
range(4
)])[
2,4,
6,8]
我們可以看到a+b
返回的是a和b內元素分別相加之後再組合起來的結果,相比下python原生中c+d
代表兩個list直接相加。
>>
> a = np.arange(1,
5)>>
> b = np.arange(1,
5)#其他運算
>>
>
print
(a-b)
>>
>
print
(a*b)
>>
>
print
(a/b)
>>
>
print
(a**b)[0
000]
[149
16][1
.1.1
.1.]
[1427
256]
#乘以標量
>>
>
print
(a*3)[
36912
]#與、或、補碼
>>
>
print
(a&b)[1
234]
#短路 a若為true跳過後面
>>
>
print
(a|b)[1
234]
>>
>
print
(~a)[-
2-3-
4-5]
>>
>
print
(a&true)[
1010
]>>
>
print
(a&false)[
0000
]#比較
>>
>
print
(a > np.e)
>>
>
print
(a >= np.e)
>>
>
print
(a < np.e)
>>
>
print
(a <= np.e)
>>
>
print
(a == np.e)
>>
>
print
(a != np.e)
[false
false
true
true][
true
true
false
false][
true
true
false
false][
false
false
false
false][
true
true
true
true
]#索引陣列 布林切片
>>
>
print
(a[a <3]
)[12
]# +=與+的區別
>>
> c = np.arange(1,
5)>>
> d = c
>>
> c += c
>>
>
print
(d)[24
68]>>
> c = np.arange(1,
5)>>
> d = c
>>
> c = c+c
>>
>
print
(d)[1234]
這裡重點說一下+=與+的區別,c += c改變了原位址的值,而c=c+c只改變了c的引用,並沒有改變原來的值,因為後者在c+c時,返回的位址就已經不是原來的位址了。
當運算中的 2 個陣列的形狀不同時,numpy 將自動觸發廣播機制。
廣播的規則:
# 4,和4,4運算
a = np.arange(4)
print
(a,a.shape)[0
123]
(4,)
b = np.zeros([4
,4])
print
(b)[[0
.0.0
.0.]
[0.0
.0.0
.][0
.0.0
.0.]
[0.0
.0.0
.]]print
(a+b)[[
0.1.
2.3.
][0.
1.2.
3.][
0.1.
2.3.
][0.
1.2.
3.]]
# 4,和4,1運算
a = np.arange(4)
print
(a)[01
23]b = np.zeros([4
,1])
print
(b)[[0
.][0
.][0
.][0
.]]print
(a+b)[[
0.1.
2.3.
][0.
1.2.
3.][
0.1.
2.3.
][0.
1.2.
3.]]
#3,和4,運算
a = np.arange(3)
print
(a)b = np.arange(4)
print
(b)print
(a+b)
valueerror: operands could not be broadcast together with shapes (3,
)(4,
)
簡單概括就是,如果shape不匹配,要麼其中乙個是1,要麼可以補維度,需要滿足下面的情況:
否則就會報錯。
Numpy 向量化運算
1.numpy array與python list 相同點 可以通過索引獲取元素。遍歷 for x in a 不同點 numpy陣列中各元素都屬於同一型別。numpy擁有很多可以使用的函式,如mean std numpy陣列可以是多維的。2.運算 a np.array 1,2,3,4 b np.ar...
機器學習 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...
機器學習 向量化
向量化 傳統累加運算 實現 import time import numpy as np 定義兩組向量 vector1 np.random.rand 100000 vector2 np.random.rand 100000 使用向量化 start time time.time 開始時間 res np...