學機器學習做點小筆記,都是python的numpy庫的基本小操作,圖書館借的書看到的,怕自己還了書後忘了,就記下來。
一般習慣匯入numpy時使用import numpy as np
,不要直接import,會有命名空間衝突。比如numpy的array和python自帶的array。
numpy下有兩個可以做矩陣的東西,乙個叫matrix,乙個叫array。matrix指定是二維矩陣,array任意維度,所以matrix是array的分支,但是這個matrix和matlab的矩陣很像,操作也很像:
>>> import numpy as np
>>> a=np.mat('4 3; 2 1') # 使用字串來初始化
>>> b=np.mat('1 2; 3 4')
>>> a
matrix([[4, 3],
[2, 1]])
>>> b
matrix([[1, 2],
[3, 4]])
>>> a+b # 對應位置相加
matrix([[5, 5],
[5, 5]])
>>> a*b # 矩陣乘法,與matlab相同
matrix([[13, 20],
[ 5, 8]])
>>> np.multiply(a,b) # 對應位置乘法,相當於matlab的點乘 「.*」
matrix([[4, 6],
[6, 4]])
而重點講講np.array。
>>>
import numpy as np
>>> np.arange(10) # 從零生成到10-1的一維矩陣
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a=np.array([0,1,2,3,4,5]) # 因為支援多維,所以用陣列來初始化
>>> a
array([0, 1, 2, 3, 4, 5])
>>> a.ndim # 檢視維度
1>>> a.shape # 檢視矩陣形狀尺寸
(6,)
>>> a.dtype # 檢視型別
dtype('int32')
>>> b=a.reshape(3,2)
>>> b
array([[0, 1],
[2, 3],
[4, 5]])
>>> b.ndim
2>>> b.shape
(3, 2)
>>> b[1][0]=77
>>> b
array([[ 0, 1],
[77, 3],
[ 4, 5]])
>>> a
array([ 0, 1, 77, 3, 4, 5]) # 可見b和a其實用的同乙個資料
>>> c=a.reshape(3,2).copy()
>>> c
array([[ 0, 1],
[77, 3],
[ 4, 5]])
>>> c[0][0]=233
>>> a
array([ 0, 1, 77, 3, 4, 5])
>>> c
array([[233, 1],
[ 77, 3],
[ 4, 5]])
>>> d=np.array([1,2,3,4,5]) # 一維矩陣運算
>>> d.t # 轉置矩陣
array([1, 2, 3, 4, 5])
>>> d*2 # 每個資料乘以2
array([ 2, 4, 6, 8, 10])
>>> d**2 # 每個資料二次方
array([ 1, 4, 9, 16, 25])
>>> d*d # 按位置乘,與「d**2」等效,和mat正好相反
array([ 1, 4, 9, 16, 25])
>>> d.dot(d) # 矩陣乘法,和mat相反
55>>> x=np.array([[1,2],[3,4],[5,6]]) # 二維矩陣運算
>>> y=np.array([[6,5,4],[3,2,1]])
>>> x
array([[1, 2],
[3, 4],
[5, 6]])
>>> y
array([[6, 5, 4],
[3, 2, 1]])
>>> x.dot(y) # 二維矩陣矩陣乘法
array([[12, 9, 6],
[30, 23, 16],
[48, 37, 26]])
>>> x= x.reshape(2,3)
>>> x
array([[1, 2, 3],
[4, 5, 6]])
>>> x*y # 按位置乘,要求兩個矩陣shape相同
array([[ 6, 10, 12],
[12, 10, 6]])
>>> x.t # 二維矩陣的轉置矩陣
array([[1, 4],
[2, 5],
[3, 6]])
>>> x.mean() # 求平均值
3.5
>>> a=np.array([5,4,3,233,9])
>>> a[np.array([2,4,3])] # 列出對應下標的數值
array([ 3, 9, 233])
>>> a>4
array([ true, false, false, true, true], dtype=bool)
>>> a[a>4]
array([ 5, 233, 9])
>>> a[a>8]=8
>>> a
array([5, 4, 3, 8, 8])
>>> a.clip(4,5) # 限定所有資料範圍
array([5, 4, 4, 5, 5])
>>> a=np.array([1,2,0,3,4])
>>> a
array([1, 2, 0, 3, 4])
>>> b=np.array([1,2,np.nan,3,4])
>>> b
array([ 1., 2., nan, 3., 4.]) # 和a不同,雖然只改了乙個nan,b每個資料後面有個「.」,說明變成float型了,說明nan其實是個float
>>> np.isnan(b)
array([false, false, true, false, false], dtype=bool)
>>> b[~np.isnan(b)]
array([ 1., 2., 3., 4.])
>>> [1,2,3,4,5]*2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> [1,2,3,4,5]**2
(報錯)
對array和np.array進行按元素平方並求和的運算,運算3000次統計時間。
>>> timeit.timeit('sum(x*x for x in range(1000))',number=3000)
0.31559807779291305
>>> timeit.timeit('sum(na*na)', setup='import numpy as np; na=np.arange(1000)',number=3000)
0.37785958035067324
>>> timeit.timeit('na.dot(na)', setup='import numpy as np; na=np.arange(1000)',number=3000)
0.0069067372806728144
驚奇的發現系統級的array求和比np.array還快,說明np.array單個資料的訪問還是比array較慢。但是用了矩陣乘法後,雖然效果一樣,但這個速度就飛起來了。 numpy基礎操作
猴急先導入包 import numpy as npvct row np.array 1 2,3 行向量 vct col np.array 4 5 6 列向量matrix np.array 1,2,3 4,5,6 7,8,9 mtx np.mat 1,2,3 4,5,6 7,8,9 from scip...
numpy基礎(筆記)
coding utf 8 import numpy as np 陣列的建立 一維 a np.array 1,2,3 b np.random.randn 5 c np.ones 4 d np.arange 7 data1 1,2,3,4 e np.array data1 print a,b,c,d,e...
numpy矩陣的基礎操作
import numpy delimiter分隔符,dtype資料格式 word alcho numpy.genfromtxt d qiujiahao4.txt delimiter dtype str print type word alcho print word alcho 0 1 2 3 4 ...