為什么要用numpy
Python中提供了list容器,可以當作數組使用。但列表中的元素可以是任何對象,因此列表中保存的是對象的指針,這樣一來,為了保存一個簡單的列表[1,2,3]。就需要三個指針和三個整數對象。對於數值運算來說,這種結構顯然不夠高效。
Python雖然也提供了array模塊,但其只支持一維數組,不支持多維數組(在TensorFlow里面偏向於矩陣理解),也沒有各種運算函數。因而不適合數值運算。
NumPy的出現彌補了這些不足。
(——摘自張若愚的《Python科學計算》)
import numpy as np
數組創建
## 常規創建方法
a = np.array([2,3,4])
b = np.array([2.0,3.0,4.0])
c = np.array([[1.0,2.0],[3.0,4.0]])
d = np.array([[1,2],[3,4]],dtype=complex) # 指定數據類型
print a, a.dtype
print b, b.dtype
print c, c.dtype
print d, d.dtype
[2 3 4] int32
[ 2. 3. 4.] float64
[[ 1. 2.]
[ 3. 4.]] float64
[[ 1.+0.j 2.+0.j]
[ 3.+0.j 4.+0.j]] complex128
數組的常用函數
print np.arange(0,7,1,dtype=np.int16) # 0為起點,間隔為1時可缺省(引起歧義下不可缺省)
print np.ones((2,3,4),dtype=np.int16) # 2頁,3行,4列,全1,指定數據類型
print np.zeros((2,3,4)) # 2頁,3行,4列,全0
print np.empty((2,3)) #值取決於內存
print np.arange(0,10,2) # 起點為0,不超過10,步長為2
print np.linspace(-1,2,5) # 起點為-1,終點為2,取5個點
print np.random.randint(0,3,(2,3)) # 大於等於0,小於3,2行3列的隨機整數
[0 1 2 3 4 5 6]
[[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
[[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]]
[[ 1.39069238e-309 1.39069238e-309 1.39069238e-309]
[ 1.39069238e-309 1.39069238e-309 1.39069238e-309]]
[0 2 4 6 8]
[-1. -0.25 0.5 1.25 2. ]
[[1 0 1]
[0 1 0]]
類型轉換
print float(1)
print int(1.0)
print bool(2)
print float(True)
1.0
1
True
1.0
數組輸出
從左到右,從上向下
一維數組打印成行,二維數組打印成矩陣,三維數組打印成矩陣列表
print np.arange(1,6,2)
print np.arange(12).reshape(3,4) # 可以改變輸出形狀
print np.arange(24).reshape(2,3,4)# 2頁,3行,4頁
[1 3 5]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
基本運算
## 元素級運算
a = np.array([1,2,3,4])
b = np.arange(4)
print a, b
print a-b
print a*b
print a**2
print 2*np.sin(a)
print a>2
print np.exp(a) # 指數
[1 2 3 4] [0 1 2 3]
[1 1 1 1]
[ 0 2 6 12]
[ 1 4 9 16]
[ 1.68294197 1.81859485 0.28224002 -1.51360499]
[False False True True]
[ 2.71828183 7.3890561 20.08553692 54.59815003]
## 矩陣運算(二維數組)
a = np.array([[1,2],[3,4]]) # 2行2列
b = np.arange(6).reshape((2,-1)) # 2行3列
print a,b
print a.dot(b) # 2行3列
原文:https://blog.csdn.net/fu6543210/article/details/83240024