[笔记]NumPy基础操作
生活随笔
收集整理的這篇文章主要介紹了
[笔记]NumPy基础操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
學機器學習做點小筆記,都是Python的NumPy庫的基本小操作,圖書館借的書看到的,怕自己還了書后忘了,就記下來。
一般習慣導(dǎo)入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 # 對應(yīng)位置相加 matrix([[5, 5],[5, 5]]) >>> a*b # 矩陣乘法,與matlab相同 matrix([[13, 20],[ 5, 8]]) >>> np.multiply(a,b) # 對應(yīng)位置乘法,相當于matlab的點乘 “.*” matrix([[4, 6],[6, 4]])而重點講講np.array。
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]) # 因為支持多維,所以用數(shù)組來初始化 >>> a array([0, 1, 2, 3, 4, 5]) >>> a.ndim # 查看維度 1 >>> a.shape # 查看矩陣形狀尺寸 (6,) >>> a.dtype # 查看類型 dtype('int32')reshape改變矩陣形狀,可以改變維度,但是reshape后的數(shù)據(jù)還是共享原來那一份數(shù)據(jù)
>>> 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其實用的同一個數(shù)據(jù)因而要產(chǎn)生的新矩陣不再關(guān)聯(lián),要使用copy():
>>> 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]])array的運算:
>>> d=np.array([1,2,3,4,5]) # 一維矩陣運算 >>> d.T # 轉(zhuǎn)置矩陣 array([1, 2, 3, 4, 5]) >>> d*2 # 每個數(shù)據(jù)乘以2 array([ 2, 4, 6, 8, 10]) >>> d**2 # 每個數(shù)據(jù)二次方 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 # 二維矩陣的轉(zhuǎn)置矩陣 array([[1, 4],[2, 5],[3, 6]]) >>> x.mean() # 求平均值 3.5關(guān)于下標的運算:(這些挺有意思的)
>>> a=np.array([5,4,3,233,9]) >>> a[np.array([2,4,3])] # 列出對應(yīng)下標的數(shù)值 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) # 限定所有數(shù)據(jù)范圍 array([5, 4, 4, 5, 5])還有一個關(guān)于nan的
>>> 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每個數(shù)據(jù)后面有個“.”,說明變成float型了,說明nan其實是個float >>> np.isnan(b) array([False, False, True, False, False], dtype=bool) >>> b[~np.isnan(b)] array([ 1., 2., 3., 4.])與系統(tǒng)自帶array的差異
array的乘法
>>> [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次統(tǒng)計時間。
>>> 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驚奇的發(fā)現(xiàn)系統(tǒng)級的array求和比np.array還快,說明np.array單個數(shù)據(jù)的訪問還是比array較慢。但是用了矩陣乘法后,雖然效果一樣,但這個速度就飛起來了。
轉(zhuǎn)載于:https://www.cnblogs.com/xienaoban/p/6798065.html
總結(jié)
以上是生活随笔為你收集整理的[笔记]NumPy基础操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (树)判断二叉树是否为BST
- 下一篇: Python学习记录之-----类