Numpy學習10 向量化和廣播

2021-10-25 06:11:45 字數 3876 閱讀 7417

我們先看乙個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...