Python科學計算庫NumPy__Python

來源:互聯網
上載者:User
1、NumPy是什麼

機器學習中常用到一個科學計算庫叫NumPy:

NumPy就是一個矩陣數組。是一個多維陣列對象,稱為ndarray。

如:

import numpya = numpy.array([[1,2,3,4],                 [5,6,7,8],                [1,3,5,7]])print(a)print(a.ndim)print(a.shape)print(a.size)print(a.dtype)print(a.itemsize)
需要注意的是:同一個NumPy數組中所有的元素必須是相同的。

2、NumPy屬性介紹

NumPy數組的維數稱為秩(rank),一維數組的秩為1,二維數組的秩為2。每一個線性數組稱為是一個軸(axes),秩即為軸的數量。上文提到的那個ndarray就是二維數組,秩為2。
numpy中常用的對象屬性:
1、ndarray.ndim:數組的維數,等於秩;
2、ndarray.shape:數組的維度,為一個標識數組在每個維度上大小的整數元組,上述ndarray的shape列印就是(3, 4);同時這個元組的長度就是數組的維數,即ndim;
3、ndarray.size:數組元素的總個數,等於shape中元素的乘積,上述ndarray的size就是12;
4、ndarray.dtype:數組中元素類型;
5、ndarray.itemsize:數組中每個元素的位元組大小,上述ndarray元素是int64類型,int64佔用64個bits,每個位元組長度為8,所以佔用64/8等於8個位元組。 3、numpy的使用

1、建立一個元素為0--14,(3,5)維度矩陣

vector = numpy.arange(15)print(vector)vector2 = vector.reshape(3,5) # 向量轉換成矩陣print(vector2)# 輸出的結果為[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14][[ 0  1  2  3  4] [ 5  6  7  8  9] [10 11 12 13 14]]

2、指定一個矩陣,元素都為0

vector3 = numpy.zeros((3,4))print(vector3)# 輸出的結果為[[ 0.  0.  0.  0.] [ 0.  0.  0.  0.] [ 0.  0.  0.  0.]]

3、

a = numpy.array([[1,2,3,4],                 [5,6,7,8],                [1,3,5,7]])print(a)print(a[:,1])# 輸出的結果為[[1 2 3 4] [5 6 7 8] [1 3 5 7]][2 6 3] #這個結果意思是取任意行中第1列的元素

4、

print(numpy.arange(10,30,5))# 輸出的結果為[10 15 20 25]# 如果需要知道這個方法的意義,可以列印help函數查詢,如:print(help(numpy.arange))
5、
# vector3 = numpy.ones((2,3,4),dtype=numpy.int32)# vector3 = numpy.random.random((2,3)) # 利用random模組隨機取數構造2行3列的數組vector3 = numpy.linspace(0, 9, 10) # linspace從0到9平均取10個數構造數組,包含0和9print(vector3)

6、ndarray的計算

# ndarray的計算a = numpy.array([20,30,40,50])b = numpy.arange(4)print(a-b)print(a-1)# 輸出結果是:[20 29 38 47][19 29 39 49]

7、矩陣的*運算和.dot運算

a = numpy.array([[1,2],                 [2,3]])b = numpy.array([[1,3],                 [2,4]])# print(a*b)print(a.dot(b))# print(numpy.dot(a,b))
8、矩陣冪運算和根號運算

a = numpy.arange(3)print(a)print(numpy.exp(a))print(numpy.square(a))#輸出結果是[0 1 2][ 1.          2.71828183  7.3890561 ][0 1 4]

9、numpy.floor(a)和numpy.random.random((3,4))

a = 10*numpy.random.random((3,4))print(a)a = numpy.floor(a)print(a)print(a.revel()) # 矩陣轉向量a.shape = (6,2)print(a.T) # 矩陣的轉置# 輸出結果:[[ 5.40834281  4.269162    7.92982643  4.279437  ] [ 7.89479131  4.06550228  1.76543625  1.47728591] [ 9.26177306  8.97762938  6.38632298  6.02355195]][[ 5.  4.  7.  4.] [ 7.  4.  1.  1.] [ 9.  8.  6.  6.]][ 6.  6.  9.  3.  0.  9.  2.  2.  7.  7.  0.  6.][[ 6.  4.  9.  5.  2.  7.] [ 5.  1.  0.  8.  6.  1.]]

10、矩陣拼接

a = numpy.floor(10*numpy.random.random((2,2)))b = numpy.floor(10*numpy.random.random((2,2)))print(a)print(b)print(numpy.hstack((a,b))) #橫著拼# print(numpy.vstack((a,b))) #豎著拼# 輸出結果:[[ 6.  3.] [ 8.  4.]][[ 6.  8.] [ 2.  2.]][[ 6.  3.  6.  8.] [ 8.  4.  2.  2.]]

11、矩陣的裁剪

a = numpy.floor(10*numpy.random.random((4,6)))print(a)print(numpy.hsplit(a,3))print(numpy.vsplit(a,2))# 輸出的結果[[ 9.  6.  3.  3.  5.  3.] [ 3.  4.  4.  7.  8.  7.] [ 9.  9.  0.  1.  0.  1.] [ 3.  1.  9.  1.  5.  6.]][array([[ 9.,  6.],       [ 3.,  4.],       [ 9.,  9.],       [ 3.,  1.]]), array([[ 3.,  3.],       [ 4.,  7.],       [ 0.,  1.],       [ 9.,  1.]]), array([[ 5.,  3.],       [ 8.,  7.],       [ 0.,  1.],       [ 5.,  6.]])][array([[ 9.,  6.,  3.,  3.,  5.,  3.],       [ 3.,  4.,  4.,  7.,  8.,  7.]]), array([[ 9.,  9.,  0.,  1.,  0.,  1.],       [ 3.,  1.,  9.,  1.,  5.,  6.]])]

12、矩陣的複製操作

定義一個ndarray對象a,

如果b = a,則a與b所指向的地址一樣,a與b的值相同,b的值改變a的值也會改變;

如果c = a.view(),則a與b所指向的地址不一樣,a與c的值相同,c的值改變,a的值也會改變;

如果d = a.copy(),則a與d所指向的地址不一樣,a與d的值也無關聯,d的值改變,a的值不改變。

13、找矩陣中每列最大元素所在的行,並拿到最大值:

a = numpy.sin(numpy.arange(20).reshape(5,4))print(a)maxIndex = a.argmax(axis = 0)print(maxIndex)maxData = a[maxIndex, range(a.shape[1])]print(maxData)# 輸出的結果是:[[ 0.          0.84147098  0.90929743  0.14112001] [-0.7568025  -0.95892427 -0.2794155   0.6569866 ] [ 0.98935825  0.41211849 -0.54402111 -0.99999021] [-0.53657292  0.42016704  0.99060736  0.65028784] [-0.28790332 -0.96139749 -0.75098725  0.14987721]][2 0 3 1][ 0.98935825  0.84147098  0.99060736  0.6569866 ]






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.