筆記 NumPy基礎操作

2021-07-26 12:00:35 字數 4103 閱讀 7824

學機器學習做點小筆記,都是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 ...