Python資料分析工具庫-Numpy 陣列支援庫(一)
在Python中有類似陣列功能的資料結構,比如list
,但在資料量大時,list
的執行速度便不盡如意,Numpy(Numerical Python)提供了真正的陣列功能,以及對資料進行快速處理的函式,Numpy中內建函式處理資料的速度是C語言級別的。Numpy支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。Numpy中的ndarray
類提供了python對多維陣列物件的支援,並具備對向量進行運算的能力,運算更為快速且節省空間。
ndarray
是N維陣列物件(矩陣),其中所有的元素都必須是相同型別。ndarray
主要包含以下幾個屬性:
ndarray.ndim
:表示陣列物件或矩陣的維度;
ndarray.shape
:表示每個維度上的陣列的大小;
ndarray.size
:表示陣列中元素的總數,等同於ndarray.shape中兩個元素的乘積;
ndarray.dtype
:表示陣列中元素的型別;
ndarray.itemsize
:表示陣列中每個元素的位元組大小,比如資料型別為float64的陣列,其元素的位元組大小為64/8=8。
比如:
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
2 建立Numpy陣列 array方法
>>> import numpy as np
>>> a = np.array([2,3,4])#建立一維陣列
>>> b = np.array([(1.5,2,3), (4,5,6)])#建立二維陣列
>>> c = np.array( [ [1,2], [3,4] ], dtype=float64 )#建立指定資料型別的陣列
如果想建立指定shape的陣列,並使用佔位符來初始化陣列,可以用以下方法:
>>> np.zeros( (3,4) )#建立3行4列矩陣,用0初始化矩陣中所有的元素
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 ) #建立三維矩陣,維度分別為2,3,4,且用1來初始化矩陣中所有的元素
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) ) #建立2行3列空矩陣,矩陣中元素初始值隨機,取決於記憶體狀態,預設情況下,建立的陣列的dtype為float64。
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
對應的zeros、ones、empty
還有zeros_like、ones_like、empty_like
,它們以另一個陣列為引數,根據其形狀和dtype建立陣列。
arange方法,與Python內建的range相似:
>>> numpy.arange(6)
array([0,1,2,3,4,5,])
>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
3 陣列基本數學操作 加、減、乘、點乘
>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A*B #矩陣相乘
array([[2, 0],
[0, 4]])
>>> A.dot(B) #矩陣點乘
array([[5, 4],
[3, 4]])
>>> np.dot(A, B) #矩陣點乘
array([[5, 4],
[3, 4]])
疊加、疊乘
>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
[3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022 , 3.72032449, 3.00011437],
[ 3.30233257, 3.14675589, 3.09233859]])
>>> a += b #浮點型不能轉換成整型
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
取最大、最小、求和
>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021, 0.34556073, 0.39676747],
[ 0.53881673, 0.41919451, 0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595
對於多維矩陣,只在其中指定軸進行操作,使用axis
引數
>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b.sum(axis=0) #對二維矩陣的列軸進行求和
array([12, 15, 18, 21])
>>> b.min(axis=1) #求二維矩陣的每個橫軸最小值
array([0, 4, 8])
通用函式(ufunc),對ndarray
中的資料執行元素級運算,比如sin、cos、exp
等:
>>> B = np.arange(3)
>>> B
array([0, 1, 2])
>>> np.exp(B)
array([ 1. , 2.71828183, 7.3890561 ])
>>> np.sqrt(B)
array([ 0. , 1. , 1.41421356])
>>> C = np.array([2., -1., 4.])
>>> np.add(B, C)
array([ 2., 0., 6.])
4 陣列的索引、切片和遍歷 和Python的list
資料結構類似,Numpy的一維陣列也可以進行索引、切片以及遍歷。
>>> a = np.arange(10)**3
>>> a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000 #從0-6的元素中,每隔2個將元素值重新賦值為-1000
>>> a
array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])
>>> for i in a:
... print(i + 1)
-999
2
-999
28
-999
126
217
344
513
730
二維陣列的索引、切片:
>>> def f(x,y):
... return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int) #函式式建立陣列,fromfunction第一個引數為函式f,第二個引數為陣列的shape,shape第一個引數為函式f第一個引數的取值範圍,第二個引數為函式f第二個引數的取值範圍,dtype表示陣列元素型別。
>>> b
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
>>> b[2,3] #不是陣列b中的第2行第三列的元素,而是索引為[2,3]的元素
23
>>> b[0:5, 1] #取出從第0行到第5行的第2個元素組成陣列
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1] #等同於前一句
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ] #取出第2行與第3行的所有元素組成陣列
array([[10, 11, 12, 13],
[20, 21, 22, 23]])
>>> for row in b: #遍歷得到b陣列的每一行元素
... print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
>>> for element in b.flat: #遍歷得到b陣列的每一個元素
... print(element)
...
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43
多維陣列的索引、切片:
>>> c = np.array( [[[ 0, 1, 2],
... [ 10, 12, 13]],
... [[100,101,102],
... [110,112,113]]])
>>> c.shape
(2, 2, 3)
>>> c[1,…] #等同於 c[1,:,:] or c[1]
array([[100, 101, 102],
[110, 112, 113]])
>>> c[...,2] #等同於 c[:,:,2]
array([[ 2, 13],
[102, 113]])
參考文獻 Numpy API文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2524/viewspace-2801602/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Numpy庫(一)- 陣列的建立陣列
- python資料分析之Numpy資料庫第三期陣列的運算Python資料庫陣列
- Python資料分析 | Numpy與1維陣列操作Python陣列
- python-資料分析-Numpy-3、陣列的運算Python陣列
- Python資料分析 – numpyPython
- Python資料分析 - NumpyPython
- Python列表建立NumPy陣列Python陣列
- python之資料庫支援Python資料庫
- sql server資料庫如何儲存陣列,int[]float[]double[]陣列儲存到資料庫方法SQLServer資料庫陣列
- Python資料分析之numpyPython
- Python科學計算庫Numpy陣列的初始化和基本操作Python陣列
- Python常用庫NumpyPython
- Python資料分析(一)--numpy全知全會Python
- Python資料分析--工具安裝及Numpy介紹(1)Python
- NumPy 基礎 (一) - 建立陣列陣列
- Python Numpy的陣列array和矩陣matrixPython陣列矩陣
- Python資料分析 numpy 筆記Python筆記
- numpy陣列(2)陣列
- Numpy陣列操作陣列
- numpy 陣列物件陣列物件
- NumPy 陣列切片及資料型別介紹陣列資料型別
- 伺服器陣列資料庫修復伺服器陣列資料庫
- Python資料分析--Numpy常用函式介紹(7)--Numpy中矩陣和通用函式Python函式矩陣
- python之numpy庫[1]Python
- python之numpy庫[2]Python
- Laravel 資料庫脫敏工具,僅支援 MySQLLaravel資料庫MySql
- Python資料分析與展示之『Numpy』Python
- python-資料分析-Numpy-2Python
- 資料分析——numpy
- NumPy 陣列屬性陣列
- mysql 資料庫效能分析工具簡介MySql資料庫
- python 如何安裝numpy庫?Python
- Python的Numpy庫簡述Python
- 【機器學習】--Python機器學習庫之Numpy機器學習Python
- NumPy 超詳細教程(1):NumPy 陣列陣列
- Numpy學習-Task01-資料型別&陣列建立資料型別陣列
- Python資料分析(二): Numpy技巧 (1/4)Python
- Python資料分析(二): Numpy技巧 (4/4)Python