數組是Numpy操作的主要對象,也是python數據分析的主要對象,本系列文章是本人在學習Numpy中的筆記。
文章中以下都基于以下方式的numpy導入:
import numpy as npfrom numpy import *
1、普通數組的創建——np.arange(), np.array(),
(1) arange()建立是順序數組,函數原型:arange([start,]stop[,step],dtype=None)
其中start參數如果省略,則表示從0開始,默認的dtype為float32
#創建從0-19的一維數組ar_1ar_1=np.arange(20)#output: ar_1=array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19])#創建11-20,step=2的一維數組ar_2ar_2=np.arange(11,21,2)#output:ar_2=array([11, 13, 15, 17, 19])
(2)array()的主要用于創建多維數組,原型為:array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
#創建一個2*3的數組,數據類型為int32ary_1=np.array([[2,2,3],[5,7,3]],dtype=int32)#output:ary_1=([[2, 2, 3],# [5, 7, 3]], dtype=int32)#創建一個2*3*3的數組,數據類型默認:ary_2=np.array([[[3,4,5],[3.3,4.2,4.2],[1.3,2.2,5.8]],[[2.3,1.9,5.7],[4.5,6.7,9.7],[2.2,1.2,7.99]]])#output:#array([[[ 3. , 4. , 5. ],# [ 3.3 , 4.2 , 4.2 ],# [ 1.3 , 2.2 , 5.8 ]],## [[ 2.3 , 1.9 , 5.7 ],# [ 4.5 , 6.7 , 9.7 ],# [ 2.2 , 1.2 , 7.99]]])ary_2.dtype#output:dtype('float64'),
#雖然由int和float, array是以可以保存這些數據的最小數據類型保存,所以是float32
#當然也可以通過reshape等方式改變數組的維度,從而獲得自己所需要的數組
ary_3=np.arange(20,30).reshape(2,5)
#output:ary_3
#array([[20, 21, 22, 23, 24],
# [25, 26, 27, 28, 29]])
2. 特殊數組的創建:
(1)空數組:empty(),empty_like()
#創建一個3*3的空數組:e_1=np.empty([3,3])#In [89]: PRint e_1#[[ 1.72723371e-077 2.68678134e+154 4.44659081e-323] #[ 0.00000000e+000 0.00000000e+000 0.00000000e+000] #[ 0.00000000e+000 0.00000000e+000 0.00000000e+000]]#填充的數值都是隨機的random#通過empty_like創建與e_1一樣形狀的空數組e_2=np.empty_like(e_1)#In [93]: print e_2#[[ 1.72723371e-077 1.72723371e-077 2.00299617e-313] #[ 1.72723371e-077 5.92878775e-323 3.18299369e-313] #[ 0.00000000e+000 9.73471935e-309 0.00000000e+000]]
(2)其他特殊數組創建:eye, ones, zeros也有類似的結構,另外還有一個identity函數,用以創建方陣
#創建3*3主對角線為1的方陣:ey_1=np.eye(3,3,k=0)print ey_1#[[ 1. 0. 0.]#[ 0. 1. 0.]#[ 0. 0. 1.]]#ey_2的對角線uper了一個位置(行)ey_2=np.eye(3,3,k=1)pringt ey_2#[[ 0. 1. 0.]#[ 0. 0. 1.]#[ 0. 0. 0.]]
one_1=np.ones([5,9])print one_1#In [99]: print one_1#[[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]#[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]#[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]#[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]#[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
zero_1=np.zeros([2,3])print zero_1#[[ 0. 0. 0.]#[ 0. 0. 0.]]
In [103]: idenOut[103]:array([[ 1., 0., 0., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0., 0., 0.], [ 0., 0., 1., 0., 0., 0., 0.], [ 0., 0., 0., 1., 0., 0., 0.], [ 0., 0., 0., 0., 1., 0., 0.], [ 0., 0., 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 0., 0., 1.]])
3. 結構體數組
通常,一個數組保存的元素都是同源的,即數組內所有元素都需為同一個類型。在實際的數據分析過程中,尤其是二維spreadsheet式格式的數據,同一行的數據由不同的類型構成。這就需要為這種數據定義一個個性的dtype。dtype實際上是一個類,可以通過賦予參數定義特殊的結構體數組類型。(個人覺得有點類似于SAS中的informat)
#定義一個名稱為person的dtype,通過dtype#一個peson由name,age和weight構成person=np.dtype([('name',str,20),('age',int32),('weight',float32)])print person#[('name', 'S20'), ('age', '<i4'), ('weight', '<f4')]#就可以創建dtype為person的數組了student=array([('cnblog',10,12.2),('myBlog',40,30)],dtype=person)#由于類型規定了參數的個數,所以需要用tuple來創建數組的行數(因為其不可變),否則可能會有一個readable的exceptionprint student#[('cnblog', 10, 12.199999809265137) ('myBlog', 40, 30.0)]
4. 從文件創建(后續會有專門介紹)
新聞熱點
疑難解答