日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
這3個(gè)函數(shù),是你學(xué)習(xí)Numpy的基礎(chǔ)!

[[398496]]

 1. 本文介紹

今天為大家介紹以下內(nèi)容:

  •  Ⅰ ndarray數(shù)組與列表的相互轉(zhuǎn)化;
  •  Ⅱ ndarray數(shù)組的數(shù)據(jù)類型轉(zhuǎn)化;
  •  Ⅲ 改變ndarray數(shù)組的形狀;

說(shuō)白了,就是講述3個(gè)函數(shù)。當(dāng)然,這只是numpy函數(shù)中的冰山一角。這里只是介紹在學(xué)習(xí)numpy過(guò)程中,最先遇到的幾個(gè)函數(shù)。

2. ndarray數(shù)組與列表的相互轉(zhuǎn)化

當(dāng)你學(xué)習(xí)numpy的時(shí)候,我就默認(rèn)你肯定已經(jīng)學(xué)過(guò)Python基礎(chǔ)了。對(duì)于list列表這個(gè)基本數(shù)據(jù)類型,你肯定不會(huì)感到陌生。

那么我們?nèi)绾螌?shí)現(xiàn) “列表” 與 “數(shù)組” 之間的相互轉(zhuǎn)化呢?

① 列表轉(zhuǎn)數(shù)組:直接將一個(gè)列表傳入array()函數(shù)中 

 
 
 
 
  1. listlist1 = list(range(10))  
  2. print(list1)  
  3. array1 = np.array(list1)  
  4. print(array1) 

結(jié)果如下:

② 數(shù)組轉(zhuǎn)列表:調(diào)用數(shù)組的tolist()方法 

 
 
 
 
  1. array2 = np.arange(10)  
  2. print(array2)  
  3. list2 = array2.tolist()  
  4. print(list2) 

結(jié)果如下:

3. ndarray數(shù)組的數(shù)據(jù)類型轉(zhuǎn)化

記住一句話:numpy中的數(shù)據(jù)類型轉(zhuǎn)換,不要使用x.dtype修改元素的數(shù)據(jù)類型,最好用x.astype()這種方式。

① numpy中常用的的數(shù)據(jù)類型

這里只說(shuō)明一下numpy中常用的數(shù)據(jù)類型,int類型和float類型,但是一般都不是直接寫int和float的,而是像int32、float64這樣的寫法,因此我們就簡(jiǎn)單說(shuō)一下這個(gè)32或64的含義。

在計(jì)算機(jī)中,最底層執(zhí)行的是0和1組成的二進(jìn)制指令,一個(gè)0或者1就代表著一個(gè)二進(jìn)制位,又叫"比特位(bit)",這里的32或64就是代表二進(jìn)制位。

根據(jù)計(jì)算機(jī)的換算單位,1字節(jié)=8二進(jìn)制位,即"1bytes=8bit",因此,根據(jù)這種換算:"32bit-4bytes"、"64bit=8bytes"。

由上述分析,我們現(xiàn)在對(duì)int32做一個(gè)總結(jié),int32說(shuō)明了該數(shù)組中每個(gè)元素的數(shù)據(jù)類型是int32,同時(shí)通過(guò)32我們又可以知道,該數(shù)組中每一個(gè)元素的存儲(chǔ)空間是4字節(jié),那么這個(gè)范圍大致是[-2147483648,2147483647]。

② 使用dtype原地修改數(shù)組的數(shù)據(jù)類型,會(huì)出現(xiàn)什么問(wèn)題? 

 
 
 
 
  1. x = np.array([1.2,3.4,5.6],dtype=np.float64)  
  2. print(x)  
  3. print(x.dtype)  
  4. print(x.nbytes)  
  5. # --------------------------------------------  
  6. x.dtype="float32"  
  7. print(x)  
  8. print(x.nbytes)  
  9. # --------------------------------------------  
  10. x.dtype="float16" 
  11. print(x)  
  12. print(x.nbytes) 

結(jié)果如下:

為什么會(huì)出現(xiàn)上述現(xiàn)象?

通過(guò)上面的測(cè)試發(fā)現(xiàn),當(dāng)我們使用"dtype"修改數(shù)組的數(shù)據(jù)類型的時(shí)候,比特位(也就是一個(gè)"二進(jìn)制位”)每壓縮為原來(lái)的二分之一,數(shù)組中的元素個(gè)數(shù)就會(huì)變?yōu)樵瓉?lái)的兩倍。

這是為什么呢?

數(shù)組一旦創(chuàng)建,它的數(shù)據(jù)類型也就定了,也就相當(dāng)于開辟了一塊內(nèi)存,用于存儲(chǔ)這個(gè)數(shù)組了,下面用一個(gè)公式形象說(shuō)明上述現(xiàn)象的原因。

假設(shè)某個(gè)數(shù)組有x個(gè)元素,采用的數(shù)據(jù)類型是int64,這個(gè)數(shù)據(jù)類型占用的內(nèi)存大小為8字節(jié),因而整個(gè)數(shù)組占用的內(nèi)存大小為8*x。

當(dāng)數(shù)據(jù)類型變?yōu)閕nt32的時(shí)候,數(shù)組中數(shù)據(jù)類型就變成了4字節(jié),通過(guò)上面的計(jì)10算我們已經(jīng)知道這個(gè)數(shù)組開辟的內(nèi)存為8x,因此元素個(gè)數(shù)就變成了8x/4-2*x,11 就是說(shuō),數(shù)組元素變?yōu)榱嗽瓉?lái)的2倍。

③ 使用astype()函數(shù)修改數(shù)組的數(shù)據(jù)類型:相當(dāng)于新創(chuàng)建了一個(gè)數(shù)組 

 
 
 
 
  1. z = np.array([1.5,3.7,4.8])  
  2. print(z)  
  3. print(z.dtype)  
  4. zzz = z.astype(np.float32) 
  5. print(zz)  
  6. print(zz.dtype) 

結(jié)果如下:

4. 改變ndarray數(shù)組的形狀

① 使用numpy中的reshape()函數(shù)修改數(shù)組對(duì)象 

 
 
 
 
  1. xx = np.arange(10).reshape(2,5)  
  2. xxx = np.reshape(xx,(5,2))  
  3. print(xxx) 

結(jié)果如下:

② 使用數(shù)組對(duì)象的reshape()方法修改數(shù)組對(duì)象 

 
 
 
 
  1. yy = np.arange(10).reshape(2,5)  
  2. print(yy) 

結(jié)果如下:

③ 改變數(shù)組形狀時(shí),如果維度大于1,可以將“最后一個(gè)維度”設(shè)置為-1 

 
 
 
 
  1. p = np.arange(6).reshape(2,3)  
  2. print(p)  
  3. q = np.arange(6).reshape(2,-1)  
  4. print(q) 

結(jié)果如下:

注意:可以這樣做的原因在于,當(dāng)你指明了前面的維度,最后一個(gè)維度會(huì)根據(jù)數(shù)組元素個(gè)數(shù)和前面的維度數(shù),自動(dòng)計(jì)算出最后一個(gè)維度的維度數(shù),也就是說(shuō)【維度一 * 維度二 * … * 維度N = 元素個(gè)數(shù)】。


當(dāng)前題目:這3個(gè)函數(shù),是你學(xué)習(xí)Numpy的基礎(chǔ)!
鏈接URL:http://m.5511xx.com/article/dpdghps.html