版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
大數(shù)據(jù)分析:基于Python
第5章NumPy余本國NumPy是Python語言用于科學(xué)計(jì)算的第三方庫,是數(shù)值計(jì)算的基礎(chǔ)模塊。NumPy支持任意維度數(shù)組與矩陣運(yùn)算,并且提供了大量對數(shù)組進(jìn)行處理的函數(shù)。這些函數(shù)可以直接作?于ndarray數(shù)組對象的每?個(gè)元素,因此,使用ndarray的運(yùn)算速度要?使?循環(huán)或者列表推導(dǎo)式快很多。Python一些其它第三方庫如Pandas、SciPy、TensorFlow等,在一定程度上都依賴于NumPy庫。Anaconda會默認(rèn)安裝一些基礎(chǔ)庫,其中就包括NumPy和Pandas庫。和所有第三方庫一樣,使用NumPy前,需先進(jìn)行導(dǎo)入操作,導(dǎo)入命令為:importnumpyasnp請注意,使用np作為NumPy的別名是一種約定俗成的做法。5.1數(shù)組的創(chuàng)建在Python中,使用NumPy庫可以輕松創(chuàng)建數(shù)組。以下是創(chuàng)建NumPy數(shù)組的一些基本方法??梢杂靡粋€(gè)列表或者元組通過array創(chuàng)建一維數(shù)組。In[1]:importnumpyasnp
In[2]:lis=[1,2,3,4,5]...:arr1=np.array(lis)...:arr1Out[2]:array([1,2,3,4,5])
In[3]:tup=tuple(lis)...:np.array(tup)Out[3]:array([1,2,3,4,5])同理,二元的列表和元組可以創(chuàng)建二維數(shù)組。In[4]:lis2=[[1,2,3],[4,5,6],[7,8,9]]...:arr2=np.array(lis2)...:arr2Out[4]:array([[1,2,3],[4,5,6],[7,8,9]])也可以用數(shù)組函數(shù)創(chuàng)建數(shù)組,如使用numpy.zeros創(chuàng)建一個(gè)全零數(shù)組。In[5]:arr3=np.zeros((3,3))#全零數(shù)組...:arr3Out[5]:array([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In[6]:#創(chuàng)建一個(gè)單位矩陣...:arr4=np.eye(3)...:arr4Out[6]:array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])在NumPy中有多種創(chuàng)建ndarray數(shù)組的函數(shù),常用的如表5-1。函數(shù)功能參數(shù)說明np.array(object,dtype)從列表或元組創(chuàng)建數(shù)據(jù)object:列表或元組dtype:數(shù)據(jù)類型(可選項(xiàng))np.arange(start,stop,step)創(chuàng)建一個(gè)一維數(shù)組start:起始值,可選項(xiàng),默認(rèn)為0stop:終止值(不包含)step:步長,可選項(xiàng),默認(rèn)為1np.random.rand(shape)隨機(jī)產(chǎn)生一個(gè)元素值為[0,1)之間隨機(jī)數(shù)的數(shù)組shape:數(shù)組形狀np.random.randn(shape)隨機(jī)產(chǎn)生一個(gè)元素值服從正態(tài)分布的隨機(jī)數(shù)的數(shù)組shape:數(shù)組形狀np.random.randint(start,stop,shape)隨機(jī)產(chǎn)生一個(gè)元素值離散均勻分布的整數(shù)數(shù)組start:起始值(包含)stop:終止值(不包含)shape:數(shù)組形狀np.random.uniform(start,stop,shape)隨機(jī)產(chǎn)生一個(gè)元素值服從均勻分布的浮點(diǎn)數(shù)數(shù)組start:起始值(包含)stop:終止值(不包含)shape:數(shù)組形狀np.ones(shape,dtype)創(chuàng)建全1數(shù)組shape:數(shù)組形狀dtype:數(shù)據(jù)類型(可選項(xiàng))np.zeros(shape,dtype)創(chuàng)建全0數(shù)組shape:數(shù)組形狀dtype:數(shù)據(jù)類型(可選項(xiàng))np.full(shape,val)創(chuàng)建全val的數(shù)組shape:數(shù)組形狀val:數(shù)組元素值np.eye(shape)創(chuàng)建對角線元素值為1的單位矩陣shape:數(shù)組形狀np.linspace(start,stop,n)創(chuàng)建一個(gè)一維等差數(shù)列數(shù)組start:序列的起始值stop:序列的終止值n:數(shù)組元素個(gè)數(shù)np.logspace(start,stop,n)創(chuàng)建一個(gè)一維等比數(shù)列數(shù)組start:序列的起始值stop:序列的終止值n:數(shù)組元素個(gè)數(shù)表5-1中表示數(shù)組形狀的shape參數(shù)若只有1個(gè)數(shù)值,則為一維數(shù)組;若給出2個(gè)數(shù)值,則為二維數(shù)組,如(3,4),表示3行4列的數(shù)組;若給出3個(gè)數(shù)值,則為三維數(shù)組,依此類推。在創(chuàng)建數(shù)組時(shí),若沒有指定數(shù)組的數(shù)據(jù)類型,NumPy會根據(jù)數(shù)組中數(shù)據(jù)元素的值推斷出一個(gè)合適的數(shù)據(jù)類型,如果想要指定數(shù)據(jù)類型,可以通過dtype參數(shù)指定。In[7]:np.array([1,2,3],dtype=float)Out[7]:array([1.,2.,3.])在前面的章節(jié)中學(xué)習(xí)過range()函數(shù),用來產(chǎn)生一個(gè)整數(shù)序列,其步長只能是整數(shù)。但是若要產(chǎn)生一個(gè)步長為小數(shù)的序列,如0.1,該怎么處理?可以用numpy下的arange()函數(shù)產(chǎn)生。np.arange()函數(shù)和range()參數(shù)使用方式一致,不同的是np.arange()函數(shù)的參數(shù)可以是小數(shù)。In[7]:arr5=np.arange(10)#創(chuàng)建0~10之間默認(rèn)步長為1的數(shù)組...:arr5Out[7]:array([0,1,2,3,4,5,6,7,8,9])In[8]:arr5.tolist()#轉(zhuǎn)化為列表Out[8]:[0,1,2,3,4,5,6,7,8,9]
In[9]:list(arr5)#轉(zhuǎn)化為列表Out[9]:[0,1,2,3,4,5,6,7,8,9]
In[10]:narr6=np.arange(1,2,0.2)#從[1,2)中每隔0.2取一個(gè)值...:narr6Out[10]:array([1.,1.2,1.4,1.6,1.8])
In[11]:_.tolist()Out[11]:[1.0,1.2,1.4,1.5999999999999999,1.7999999999999998]將數(shù)組轉(zhuǎn)化為列表可以用數(shù)組的tolist()方法,也可以用list()函數(shù)。在In[11]中使用了運(yùn)算符“_”,表示上一次運(yùn)算結(jié)果。在Out[11]的結(jié)果中數(shù)值由于浮點(diǎn)運(yùn)算的影響,并沒有跟數(shù)組的值一致,而是以近似值顯示。在數(shù)據(jù)處理過程中,經(jīng)常會用到隨機(jī)模擬數(shù)據(jù),如產(chǎn)生一個(gè)從0到100之間的2×3的數(shù)組,或者產(chǎn)生一個(gè)0到1之間服從正態(tài)分布的10個(gè)浮點(diǎn)數(shù),可以使用np.rand的隨機(jī)函數(shù)rand()、randn()、randint()創(chuàng)建隨機(jī)數(shù)組,它們之間的區(qū)別如下。np.random.rand():用于生成指定形狀的[0,1)之間的均勻分布的隨機(jī)數(shù)。它接受多個(gè)參數(shù)來指定返回?cái)?shù)組的形狀,每個(gè)參數(shù)對應(yīng)于生成數(shù)組的一個(gè)維度。例如,np.random.rand(3,2)將生成一個(gè)形狀為(3,2)的二維數(shù)組。np.random.randn():用于生成指定形狀的標(biāo)準(zhǔn)正態(tài)分布(平均值為0,標(biāo)準(zhǔn)差為1)的隨機(jī)數(shù)。與np.random.rand類似,它也接受多個(gè)參數(shù)來指定返回?cái)?shù)組的形狀。例如,np.random.randn(3,2)將生成一個(gè)形狀為(3,2)的二維數(shù)組。np.random.randint():用于生成指定范圍內(nèi)的隨機(jī)整數(shù),默認(rèn)為int。它接受三個(gè)參數(shù),分別是最小值、最大值和返回?cái)?shù)組的形狀。例如,np.random.randint(0,10,(3,2))將生成一個(gè)形狀為(3,2)的二維數(shù)組,其中的元素是0到9(不包括10)之間的隨機(jī)整數(shù)。In[12]:np.random.rand()#隨機(jī)產(chǎn)生[0,1)之間的1個(gè)均勻分布的隨機(jī)數(shù)Out[12]:0.9636627605010293
In[13]:np.random.rand(2)#隨機(jī)產(chǎn)生[0,1)之間的2個(gè)均勻分布的隨機(jī)數(shù)Out[13]:array([0.38344152,0.79172504])
In[14]:np.random.rand(2,3)#隨機(jī)產(chǎn)生[0,1)間的2×3形狀均勻分布的隨機(jī)數(shù)Out[14]:array([[0.52889492,0.56804456,0.92559664],[0.07103606,0.0871293,0.0202184]])np.random.rand()生成[0,1)之間的均勻分布的隨機(jī)數(shù)。In[15]:np.random.randn()Out[15]:0.48431215412066475
In[16]:np.random.randn(3)Out[16]:array([0.57914048,-0.18158257,1.41020463])In[17]:np.random.randn(3,2)Out[17]:array([[-0.37447169,0.27519832],[-0.96075461,0.37692697],[0.03343893,0.68056724]])In[18]:np.random.randint(0,10,(3,2))Out[18]:array([[0,0],[4,5],[5,6]])np.random.randn()生成標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)。np.random.randint()生成指定范圍內(nèi)的隨機(jī)整數(shù)。其參數(shù)也可以是1個(gè)或2個(gè)。np.random.randint(10)#生成一個(gè)0到9之間的隨機(jī)整數(shù)np.random.randint(5,10)#生成一個(gè)5到9之間的隨機(jī)整數(shù)In[19]:np.random.randint(10)#生成一個(gè)0到9之間的隨機(jī)整數(shù)Out[19]:8
In[20]:np.random.randint(0,10,5)Out[20]:array([4,1,4,9,8])需要注意的是,這些函數(shù)生成的隨機(jī)數(shù)都具有可重復(fù)性,這是因?yàn)樗鼈兪腔诠潭ǖ姆N子生成的。可以通過設(shè)置種子來保證每次運(yùn)行代碼時(shí)生成的隨機(jī)數(shù)都是相同的,例如np.random.seed(0)。In[21]:np.random.seed(0)...:np.random.rand()Out[21]:0.5488135039273248
In[22]:np.random.seed(0)...:np.random.rand()Out[22]:0.5488135039273248上面的運(yùn)行兩次的隨機(jī)種子數(shù)均為0,其結(jié)果也均一致。數(shù)組對象有6個(gè)常用屬性,如表5-2所示。創(chuàng)建數(shù)組后,可以查看其對象屬性的值。屬性說明ndarray.ndim獲取數(shù)組軸的個(gè)數(shù),也就是數(shù)組的秩ndarray.shape獲取數(shù)組的維度,返回一個(gè)表示數(shù)組形狀的元組ndarray.size獲取數(shù)組元素的個(gè)數(shù)ndarray.dtype獲取數(shù)組元素的數(shù)據(jù)類型ndarray.itemsize獲取數(shù)組中每個(gè)元素的大小,以字節(jié)為單位ndarray.T數(shù)組的轉(zhuǎn)置矩陣表5-2ndarray數(shù)組對象的常用屬性In[23]:arr1=np.random.randint(0,10,(3,5))#創(chuàng)建一個(gè)3行5列的二維數(shù)組...:print("數(shù)組為:\n",arr1)數(shù)組為:[[50337][93524][76881]]
In[24]:arr1.shapeOut[24]:(3,5)In[25]:arr1.sizeOut[25]:15
In[26]:arr1.T#轉(zhuǎn)置Out[26]:array([[5,9,7],[0,3,6],[3,5,8],[3,2,8],[7,4,1]])
In[27]:arr1.dtypeOut[27]:dtype('int32')
函數(shù)說明ndarray.reshape(m,n)將原數(shù)組變?yōu)閙行n列,操作不影響原數(shù)組ndarray.resize(m,n)直接將原數(shù)組形狀修改為m行n列ndarray.flatten()不改變原數(shù)組,返回將原有數(shù)組展平成一維數(shù)組的副本ndarray.ravel()將原有數(shù)組展平成一維數(shù)組,不改變原數(shù)組,只返回原數(shù)組的一個(gè)視圖ndarray.transpose()數(shù)組轉(zhuǎn)置,將數(shù)組的行變成列5.2數(shù)組操作數(shù)組之間的操作比較多,如數(shù)組的形狀變換、數(shù)組的分割、數(shù)組的元素類型轉(zhuǎn)換等等。5.2.1數(shù)組變換數(shù)組創(chuàng)建后,可根據(jù)需求改變數(shù)組的基礎(chǔ)形態(tài),如改變形狀、轉(zhuǎn)置、展平等操作,表5-3列出了常用的數(shù)組變換方法。表5-3數(shù)組變換方法使用reshape()方法改變數(shù)組形狀,不會修改原始數(shù)組,而是生成了一個(gè)新的數(shù)組,而使用resize()方法的效果與reshape()相同,但是會直接在原始數(shù)組上進(jìn)行操作。對于reshape()和resize()方法,若將參數(shù)m和n其中一個(gè)設(shè)置為-1,則表示數(shù)組的維度通過數(shù)組元素的個(gè)數(shù)自動計(jì)算。In[1]:importnumpyasnp...:narr1=np.arange(12)...:narr1Out[1]:array([0,1,2,3,4,5,6,7,8,9,10,11])
In[2]:narr1.reshape(3,4)#將一維narr1修改為3行4列的數(shù)組Out[2]:array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
In[3]:narr1#narr1本身沒有被改變Out[3]:array([0,1,2,3,4,5,6,7,8,9,10,11])
In[4]:narr1.reshape(6,-1)#自動計(jì)算列數(shù)Out[4]:array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]])5.2.2轉(zhuǎn)換數(shù)組類型雖然數(shù)組要求所有元素的數(shù)據(jù)類型必須相同,但在需要時(shí)也可以通過astype()方法對數(shù)組中元素的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。需要注意的是,如果將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),則小數(shù)部分會被截?cái)唷H鐒?chuàng)建一個(gè)元素全為字符串的數(shù)組,先將其轉(zhuǎn)換浮點(diǎn)數(shù),再轉(zhuǎn)換為整數(shù)。In[5]:narr2=np.full((3,3),"1.1")...:narr2Out[5]:array([['1.1','1.1','1.1'],['1.1','1.1','1.1'],['1.1','1.1','1.1']],dtype='<U3')
In[6]:narr2.dtype#查看數(shù)組narr2的數(shù)據(jù)類型Out[6]:dtype('<U3')
In[7]:nar=narr2.astype(float)#將數(shù)組narr2的數(shù)據(jù)類型轉(zhuǎn)換為float...:narOut[7]:array([[1.1,1.1,1.1],[1.1,1.1,1.1],[1.1,1.1,1.1]])In[10]:nar.dtype#查看數(shù)組轉(zhuǎn)化后的數(shù)據(jù)類型Out[10]:dtype('float64')
In[11]:nar.astype(int)#將數(shù)組nar的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)Out[11]:array([[1,1,1],[1,1,1],[1,1,1]])
In[12]:_.dtype#查看數(shù)組轉(zhuǎn)化后的數(shù)據(jù)類型Out[12]:dtype('int32')5.2.3數(shù)組拼接與分割NumPy中使用vstack()和hstack()函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)組的拼接;使用concatenate()函數(shù)實(shí)現(xiàn)一次完成多個(gè)數(shù)組的拼接?;臼褂梅椒椋簄p.vstack((a,b)):將數(shù)組a和b從垂直方向拼接,要求兩個(gè)數(shù)組的列數(shù)一致。np.hstack((a,b)):將數(shù)組a和b從水平方向拼接,要求兩個(gè)數(shù)組的行數(shù)一致。np.concatenate((a1,a2,…),axis):將a1、a2、…多個(gè)數(shù)組進(jìn)行拼接,當(dāng)axis=0時(shí)按垂直方向拼接(默認(rèn)),當(dāng)axis=1時(shí)按水平方向拼接。In[13]:a=np.full((2,3),1)...:aOut[13]:array([[1,1,1],[1,1,1]])
In[14]:b=np.full((2,3),2)...:bOut[14]:array([[2,2,2],[2,2,2]])
In[15]:np.hstack((a,b))#將數(shù)組a,b橫向拼接Out[15]:array([[1,1,1,2,2,2],[1,1,1,2,2,2]])In[16]:np.vstack((a,b))#將數(shù)組a,b縱向拼接Out[16]:array([[1,1,1],[1,1,1],[2,2,2],[2,2,2]])
In[17]:c=np.full((2,3),3)...:cOut[17]:array([[3,3,3],[3,3,3]])
In[18]:np.concatenate((a,b,c),axis=1)#將數(shù)組a,b,c水平方向拼接Out[18]:array([[1,1,1,2,2,2,3,3,3],[1,1,1,2,2,2,3,3,3]])NumPy中使用vsplit()、hsplit()和split()函數(shù)分別實(shí)現(xiàn)數(shù)組橫向、縱向和指定方向的分割?;臼褂梅椒椋簄p.vsplit((a,v)):將數(shù)組a在水平方向分隔成v等分np.hsplit((a,v)):將數(shù)組a在垂直方向分隔成v等分np.split(a,v,axis):若v為整數(shù),則將數(shù)組a平均分隔成v等分;若v為數(shù)組,則數(shù)組中的元素?cái)?shù)值為分隔位置;當(dāng)axis=0時(shí)按水平方向分隔(默認(rèn)),當(dāng)axis=1時(shí)按豎直方向分隔。In[19]:aa=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]])...:aaOut[19]:array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]])
In[20]:np.vsplit(aa,2)#將數(shù)組aa水平方向2等分Out[20]:[array([[1,2,3,4],[1,2,3,4]]),array([[1,2,3,4],[1,2,3,4]])]In[21]:np.hsplit(aa,2)#將數(shù)組aa垂直方向2等分Out[21]:[array([[1,2],[1,2],[1,2],[1,2]]),array([[3,4],[3,4],[3,4],[3,4]])]
In[22]:np.split(aa,2,axis=1)Out[22]:[array([[1,2],[1,2],[1,2],[1,2]]),array([[3,4],[3,4],[3,4],[3,4]])]5.2.4數(shù)組排序在NumPy中,可以使用sort()函數(shù)和方法對數(shù)組進(jìn)行按行或按列排序,還可以使用argsort()函數(shù)獲得數(shù)組元素排序后的索引位置?;臼褂梅椒ㄈ缦拢簄p.sort(a,axis):對數(shù)組a按行或者列排序,生成一個(gè)新的數(shù)組,當(dāng)axis=1時(shí),按行排序,當(dāng)axis=0時(shí),按列排序。a.sort(axis):對數(shù)組a使用sort()方法進(jìn)行排序,因sort()方法是直接作用在數(shù)組對象上的,所以會改變原始數(shù)組。np.argsort(a):返回對數(shù)組a元素排序后的索引位置。In[23]:narr1=np.array([[1,4,3,2],[11,10,9,12],[7,6,5,8]])...:narr1Out[23]:array([[1,4,3,2],[11,10,9,12],[7,6,5,8]])
In[24]:np.sort(narr1,axis=1)#對數(shù)組按行排序,原數(shù)組不發(fā)生改變Out[24]:array([[1,2,3,4],[9,10,11,12],[5,6,7,8]])In[25]:narr1#原數(shù)組沒有改變Out[25]:array([[1,4,3,2],[11,10,9,12],[7,6,5,8]])
In[26]:narr1.sort(axis=0)#對數(shù)組按列進(jìn)行排序,直接在原數(shù)組上修改
In[27]:narr1#原數(shù)組被改變Out[27]:array([[1,4,3,2],[7,6,5,8],[11,10,9,12]])
In[28]:np.argsort(narr1)#返回對數(shù)組narr1中元素排序后的索引位置Out[28]:array([[0,3,2,1],[2,1,0,3],[2,1,0,3]],dtype=int64)5.3條件篩選數(shù)組中的元素可以通過索引和切片進(jìn)行訪問和修改,操作同列表。對數(shù)組元素進(jìn)行篩選可以通過條件表達(dá)式和where()函數(shù)實(shí)現(xiàn)。1.條件表達(dá)式篩選例如,創(chuàng)建范圍在32到56之間的隨機(jī)整數(shù)數(shù)組,表示12歲兒童的體重(kg),分別篩選出其中體重低于35kg和體重在40~50kg之間的。In[1]:importnumpyasnp...:w=np.random.randint(32,55,(3,5))...:wOut[1]:array([[35,38,53,34,45],[48,45,45,42,46],[47,42,39,42,42]])獲取體重小于35kg的數(shù)據(jù)。In[2]:w<35#獲得體重低于35的布爾數(shù)組Out[2]:array([[False,False,False,True,False],[False,False,False,False,False],[False,False,False,False,False]])返回的是邏輯值,從一堆邏輯之中很難發(fā)現(xiàn)要找的數(shù)據(jù),但是邏輯值可以做為索引值使用。In[3]:w[w<35]#篩選出體重低于35的數(shù)組元素Out[3]:array([34])In[4]:cond=(w>=40)&(w<=50)#獲得體重在40~50的布爾數(shù)組...:condOut[4]:array([[False,False,False,False,True],[True,True,True,True,True],[True,True,False,True,True]])
In[5]:w[cond]Out[5]:array([45,48,45,45,42,46,47,42,42,42])邏輯值作為索引時(shí)僅返回真值。2.where()函數(shù)篩選在NumPy中使用where()函數(shù)返回?cái)?shù)組中滿足給定條件的元素的索引,基本格式為:np.where(condition)condition為篩選條件,返回結(jié)果以tuple元組的形式給出,原數(shù)組有多少維,輸出的元組中就包含多少個(gè)數(shù)組,分別對應(yīng)符合條件元素的各維度索引。例如,使用where()函數(shù)篩選上述兒童體重在40~50kg的數(shù)組元素。In[7]:w[idx]Out[7]:array([45,48,45,45,42,46,47,42,42,42])In[6]:idx=np.where((w>=40)&(w<=50))#獲得體重在40~50之間元素的索引...:idxOut[6]:(array([0,1,1,1,1,1,2,2,2,2],dtype=int64),array([4,0,1,2,3,4,0,1,3,4],dtype=int64))注意這里返回的結(jié)果元組中的第一個(gè)是滿足條件的行索引,第二個(gè)是滿足條件的列索引,如結(jié)果元組idx[0][0]是0,idx[1][0]是4,組合起來就是(0,4)索引位置,該位置上的元素為45。根據(jù)數(shù)組元素的索引,篩選出體重在40-50之間的數(shù)組元素。5.4數(shù)組的運(yùn)算
數(shù)組的運(yùn)算包括數(shù)組間的算術(shù)運(yùn)算、統(tǒng)計(jì)運(yùn)算,以及廣播機(jī)制等。5.4.1算術(shù)運(yùn)算數(shù)組的算術(shù)運(yùn)算表示對數(shù)組的每個(gè)元素分別進(jìn)行算術(shù)運(yùn)算,結(jié)果得到形狀相同的數(shù)組。數(shù)組支持的算術(shù)有加(+)、減(-)、乘(*,包括(**))、除(/),進(jìn)行運(yùn)算的兩個(gè)數(shù)組必須形狀相同。例如,創(chuàng)建兩個(gè)相同形狀的數(shù)組,并對數(shù)組進(jìn)行算術(shù)運(yùn)算。In[1]:importnumpyasnp...:a=np.random.randint(0,10,(3,4))#創(chuàng)建一個(gè)3行4列的隨機(jī)整數(shù)數(shù)組a...:aOut[1]:array([[6,7,0,1],[2,8,1,9],[0,1,8,8]])In[2]:b=np.random.randint(0,10,(3,4))#創(chuàng)建一個(gè)3行4列的隨機(jī)整數(shù)數(shù)組b...:bOut[2]:array([[3,2,8,9],[7,8,4,5],[1,2,1,3]])In[3]:a+b#數(shù)組a,b相加Out[3]:array([[9,9,8,10],[9,16,5,14],[1,3,9,11]])
In[4]:a*b#數(shù)組a,b相乘Out[4]:array([[18,14,0,9],[14,64,4,45],[0,2,8,24]])
In[5]:a/b#數(shù)組a,b相除Out[5]:array([[2.,3.5,0.,0.11111111],[0.28571429,1.,0.25,1.8],[0.,0.5,8.,2.66666667]])5.4.2廣播機(jī)制廣播(Broadcast)是在NumPy中對不同形狀的數(shù)組進(jìn)行數(shù)值計(jì)算的方式。當(dāng)兩個(gè)不同形狀的數(shù)組進(jìn)行算術(shù)運(yùn)算時(shí),就會自動觸發(fā)廣播機(jī)制。廣播機(jī)制的規(guī)則有以下幾點(diǎn):(1)參與運(yùn)算的數(shù)組都向其中形狀最長的數(shù)組看齊,形狀長度不夠則加1補(bǔ)齊。(2)運(yùn)算結(jié)果數(shù)組的形狀是參與運(yùn)算數(shù)組形狀的各維度上的最大值。(3)若參與運(yùn)算的數(shù)組的某個(gè)維度和運(yùn)算結(jié)果數(shù)組的對應(yīng)維度的長度相等或者長度為1時(shí),則該數(shù)組能夠用來計(jì)算,否則報(bào)錯(cuò)。(4)當(dāng)參與運(yùn)算的數(shù)組的某個(gè)維度的長度為1,沿著此維度運(yùn)算時(shí),都用該維度上的第一組元素。例如,創(chuàng)建兩個(gè)不同形狀的數(shù)組,利用NumPy的廣播機(jī)制進(jìn)行算術(shù)運(yùn)算。In[6]:a=np.array([10,0,2])...:b=np.array([[1,2,3],[4,5,6],[7,8,9]])
In[7]:a*bOut[7]:array([[10,0,6],[40,0,12],[70,0,18]])函數(shù)說明np.abs(a),np.fabs(a)計(jì)算a中各元素的絕對值np.sqrt(a)計(jì)算a中各個(gè)元素的平方根np.square(a)計(jì)算a中各個(gè)元素的平方np.sign(a)計(jì)算a中各個(gè)元素的符號值np.exp(a)計(jì)算a中各元素的指數(shù)值np.ceil(a)計(jì)算a中各元素大于或等于其自身的最小整數(shù),即向下取整np.floor(a)計(jì)算a中各元素大于或等于其自身的最大整數(shù),即向上取整np.rint(a)對a中各元素四舍五入取整數(shù)np.round(a,n)對x中的各元素四舍五入保留n位小數(shù)np.equal(a,b)比較兩個(gè)數(shù)組a、b對應(yīng)的元素是否相等,返回布爾型數(shù)組np.not_equal(a,b)比較兩個(gè)數(shù)組a、b對應(yīng)的元素是否不相等,返回布爾型數(shù)組np.cos(a),np.sin(a),np.tan(a)計(jì)算a中各元素的三角函數(shù)5.4.3數(shù)學(xué)運(yùn)算函數(shù)NumPy中提供了一系列數(shù)學(xué)計(jì)算函數(shù),常用的數(shù)學(xué)計(jì)算函數(shù)如表5-4所示。表5-4NumPy常用數(shù)學(xué)函數(shù)In[8]:a2=np.arange(9).reshape(3,3)#創(chuàng)建3行3列的數(shù)組a2...:a2Out[8]:array([[0,1,2],[3,4,5],[6,7,8]])
In[9]:b_1=np.sqrt(a2)#對數(shù)組a2中的每個(gè)元素計(jì)算平方根...:b_1Out[9]:array([[0.,1.,1.41421356],[1.73205081,2.,2.23606798],[2.44948974,2.64575131,2.82842712]])
In[10]:b_2=np.round(b_1,2)#對b_1的每個(gè)元素四舍五入保留2位小數(shù)...:b_2Out[10]:array([[0.,1.,1.41],[1.73,2.,2.24],[2.45,2.65,2.83]])
In[11]:b_3=np.ceil(b_2)#對數(shù)組b_2中的每個(gè)元素向上取整...:b_3Out[11]:array([[0.,1.,2.],[2.,2.,3.],[3.,3.,3.]])
In[12]:np.equal(b_2,b_3)#比較b_2、b_3兩個(gè)數(shù)組對應(yīng)的元素是否相等Out[12]:array([[True,True,False],[False,True,False],
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 素描室內(nèi)寫生課程設(shè)計(jì)
- 相機(jī)掛件課程設(shè)計(jì)
- 英語語言學(xué)課程設(shè)計(jì)
- 航空專業(yè)票務(wù)課程設(shè)計(jì)
- (中職中專)貿(mào)法律與案例教學(xué)設(shè)計(jì)全書電子教案整本書教案1-6章全
- 電信課程設(shè)計(jì)論文
- 糖化鍋課程設(shè)計(jì)選型
- 給水廠課程設(shè)計(jì)總結(jié)心得
- 游戲觀察課程設(shè)計(jì)
- 聯(lián)考素描課程設(shè)計(jì)考什么
- 叉車維護(hù)維修合同
- 2024年財(cái)務(wù)部年度工作總結(jié)(7篇)
- 2024年度醫(yī)療美容服務(wù)合作合同3篇
- 水利工程勞務(wù)施工方案
- 山東省德州市2023-2024學(xué)年高二上學(xué)期期末考試政治試題 附答案
- 高中體育教學(xué)教案30篇
- 2025年低壓電工作業(yè)模擬考試題庫
- 七年級上冊語文??急乇持攸c(diǎn)知識梳理(pdf版)
- 銀行先進(jìn)個(gè)人先進(jìn)事跡材料
- 排洪渠擋墻、河道清淤及渣土外運(yùn)施工方案
- 上海市近10年物理中考真題匯編專題05電路故障分析2
評論
0/150
提交評論