python基礎之Numpy庫中array用法總結
前言
Numpy是Python的一個科學計算的庫,提供了矩陣運算的功能,其一般與Scipy、matplotlib一起使用。其實,list已經提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。
NumPy數(shù)組是一個多維數(shù)組對象,稱為ndarray。數(shù)組的下標從0開始,同一個NumPy數(shù)組中所有元素的類型必須是相同的。
>>> import numpy as np
為什么要用numpy
Python中提供了list容器,可以當作數(shù)組使用。但列表中的元素可以是任何對象,因此列表中保存的是對象的指針,這樣一來,為了保存一個簡單的列表[1,2,3]。就需要三個指針和三個整數(shù)對象。對于數(shù)值運算來說,這種結構顯然不夠高效。
Python雖然也提供了array模塊,但其只支持一維數(shù)組,不支持多維數(shù)組(在TensorFlow里面偏向于矩陣理解),也沒有各種運算函數(shù)。因而不適合數(shù)值運算。
NumPy的出現(xiàn)彌補了這些不足。
數(shù)組的創(chuàng)建
使用numpy.array方法將tuple和list, array, 或者其他的序列模式的數(shù)據(jù)轉創(chuàng)建為 ndarray, 默認創(chuàng)建一個新的 ndarray.
>>> np.array([1,2,3,4]) [1 2 3 4] >>> b = array( [ (1.5,2,3), (4,5,6) ] ) array([[ 1.5, 2. , 3. ], [ 4. , 5. , 6. ]]) >>> c = array( [ [1,2], [3,4] ], dtype=complex) #指定數(shù)組中元素的類型 >>> c array([[ 1.+0.j, 2.+0.j], [ 3.+0.j, 4.+0.j]])
生成均勻分布的array:
arange(最小值,最大值,步長)(左閉右開) : 創(chuàng)建等差數(shù)列
linspace(最小值,最大值,元素數(shù)量)
logspace(開始值, 終值, 元素個數(shù)): 創(chuàng)建等比數(shù)列
>>> np.arange(15) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] >>> np.arange(15).reshape(3,5) [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] >>> np.arange( 0, 2, 0.3 ) array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8]) >>> np.linspace(1,3,9) [ 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75 3. ]
生成特殊數(shù)組
np.ones: 創(chuàng)建一個數(shù)組, 其中的元素全為 1
np.zeros: 創(chuàng)建元素全為 0 的數(shù)組, 類似 np.ones
np.empty創(chuàng)建一個內容隨機并且依賴與內存狀態(tài)的數(shù)組。
np.eye: 創(chuàng)建一個對角線為 1 其他為 0 的矩陣.
np.identity: 創(chuàng)建一個主對角線為 1 其他為 0 的方陣.
>>> np.zeros((3,4)) [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] >>> np.ones((3,4)) [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]] >>> np.eye(3) [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]
獲取數(shù)組的屬性
>>> a = np.zeros((2,2,2)) >>> a.ndim #數(shù)組的維數(shù) 3 >>> a.shape #數(shù)組每一維的大小 (2, 2, 2) >>> a.size #數(shù)組全部元素的數(shù)量 8 >>> a.dtype #數(shù)組中元素的類型 float64 >>> print a.itemsize #每個元素所占的字節(jié)數(shù) 8
數(shù)組索引,切片,賦值
‘…'符號表示將所有未指定索引的維度均賦為 ‘:'
‘:'在python中表示該維所有元素
>>> a = np.array( [[2,3,4],[5,6,7]] ) >>> a [[2 3 4] [5 6 7]] >>> a[1,2] 7 >>> a[1,:] [5 6 7] >>> print a[1,1:2] [6] >>> a[1,:] = [8,9,10] >>> a [[ 2 3 4] [ 8 9 10]] >>> c[1,...] # same as c[1,:,:] or c[1] array([[100, 101, 102], [110, 112, 113]]) >>> c[...,2] # same as c[:,:,2] array([[ 2, 13], [102, 113]]) >>> def f(x,y): ... return 10*x+y ... >>> b = np.fromfunction(f,(5,4),dtype=int) # >>> b array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
數(shù)組操作
>>> a = np.ones((2,2)) >>> b = np.eye(2) >>> print a [[ 1. 1.] [ 1. 1.]] >>> print b [[ 1. 0.] [ 0. 1.]]
>>> print a > 2 [[False False] [False False]] >>> print a+b #數(shù)組加,對應位置相加 [[ 2. 1.] [ 1. 2.]] >>> print a-b #數(shù)組減,對應位置相減 [[ 0. 1.] [ 1. 0.]] >>> print b*2 #數(shù)組與數(shù)值相乘,對應位置乘 [[ 2. 0.] [ 0. 2.]] >>> print (a*2)*(b*2) #數(shù)組與數(shù)組相乘,按位置一對一相乘 [[ 4. 0.] [ 0. 4.]] >>> print b/(a*2) #數(shù)組與數(shù)組相除,按位置一對一相除 [[ 0.5 0. ] [ 0. 0.5]] >>> print a.dot(b) # matrix product,矩陣乘 >>> np.dot(a,a) #矩陣乘法 array([[ 2., 2.], [ 2., 2.]]) >>> print (a*2)**4 [[ 16. 16.] [ 16. 16.]] >>> b = a #淺拷貝 >>> b is a True >>> c = a.copy() #深拷貝 >>> c is a False
內置函數(shù)(min,max,sum),同時可以使用axis指定對哪一維進行操作:
>>> a.sum() 4.0 >>> a.sum(axis=0) #計算每一列(二維數(shù)組中類似于矩陣的列)的和 array([ 2., 2.]) >>> a.min() #數(shù)組最小值 1.0 >>> a.max() #數(shù)組最大值 1.0
使用numpy下的方法:
>>> np.sin(a) array([[ 0.84147098, 0.84147098], [ 0.84147098, 0.84147098]]) >>> np.max(a) 1.0 >>> np.floor(a) array([[ 1., 1.], [ 1., 1.]]) >>> np.exp(a) #e^x array([[ 2.71828183, 2.71828183], [ 2.71828183, 2.71828183]]) >>> print np.vstack((a,b)) #合并數(shù)組 [[ 1. 1.] [ 1. 1.] [ 1. 0.] [ 0. 1.]] >>> print np.hstack((a,b)) #合并數(shù)組 [[ 1. 1. 1. 0.] [ 1. 1. 0. 1.]] >>> print a.transpose() #轉置
numpy.linalg模塊中有很多關于矩陣運算的方法:
>>> import numpy.linalg as nplg
NumPy中的基本數(shù)據(jù)類型
名稱 | 描述 |
---|---|
bool | 用一個字節(jié)存儲的布爾類型(True或False) |
inti | 由所在平臺決定其大小的整數(shù)(一般為int32或int64) |
int8/16/32/64 | 整數(shù),1/2/4/8個字節(jié)大小 |
uint8/16/32/64 | 無符號整數(shù) |
float16/32/64 | 半/單/雙精度浮點數(shù),16/32/64位,指數(shù)、精度也不同 |
complex64/128 | 復數(shù),分別用兩個32/64位浮點數(shù)表示實部和虛部 |
輸出數(shù)組
當輸出一個數(shù)組時,NumPy以特定的布局用類似嵌套列表的形式顯示:
- 第一行從左到右輸出
- 每個切片通過一個空行與下一個隔開
- 一維數(shù)組被打印成行,二維數(shù)組成矩陣,三維數(shù)組成矩陣列表。
- 如果一個數(shù)組太長,則NumPy自動省略中間部分而只打印兩端的數(shù)據(jù):
>>> a = arange(6) # 1d array >>> print a [0 1 2 3 4 5] >>> b = arange(12).reshape(4,3) # 2d array >>> print b [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> c = arange(24).reshape(2,3,4) # 3d array >>> print c [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]
總結
到此這篇關于python基礎之Numpy庫中array用法的文章就介紹到這了,更多相關python Numpy中array用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python pyWinAuto庫自動化Windows任務的示例代碼
pywinauto是Python的一個強大的自動化庫,它可以用于控制Windows應用程序的用戶界面,本文將詳細介紹pywinauto庫的安裝、基本用法和高級應用,以便你能夠更好地了解如何使用它來自動化Windows應用程序,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2023-11-11使用Python腳本實現(xiàn)批量網(wǎng)站存活檢測遇到問題及解決方法
本文是小編自己編寫的一個使用python實現(xiàn)批量網(wǎng)站存活檢測。在項目測試中非常有用。本文給大家分享了遇到的問題及解決方案,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧2016-10-10手把手教你怎么用Python實現(xiàn)zip文件密碼的破解
之前在家里的老電腦中,發(fā)現(xiàn)一個加密zip壓縮包,由于時隔太久忘記密碼了,依稀記得密碼是6位字母加數(shù)字,網(wǎng)上下載了很多破解密碼的軟件都沒有效果,于是想到自己用Python寫一個暴力破解密碼的腳本,需要的朋友可以參考下2021-05-05Python利用多線程同步鎖實現(xiàn)多窗口訂票系統(tǒng)(推薦)
這篇文章主要介紹了Python利用多線程同步鎖實現(xiàn)多窗口訂票系統(tǒng),主要是利用threading.lock()通過實例代碼相結合給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12