欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 中的list和array的不同之處及轉(zhuǎn)換問題

 更新時(shí)間:2018年03月13日 10:57:31   作者:liyaohhh  
python中的list是python的內(nèi)置數(shù)據(jù)類型,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同。這篇文章給大家介紹了python 中的list和array的不同之處及轉(zhuǎn)換問題,需要的朋友參考下吧

python中的list是python的內(nèi)置數(shù)據(jù)類型,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同。在list中的數(shù)據(jù)類型保存的是數(shù)據(jù)的存放的地址,簡(jiǎn)單的說就是指針,并非數(shù)據(jù),這樣保存一個(gè)list就太麻煩了,例如list1=[1,2,3,'a']需要4個(gè)指針和四個(gè)數(shù)據(jù),增加了存儲(chǔ)和消耗cpu。

      numpy中封裝的array有很強(qiáng)大的功能,里面存放的都是相同的數(shù)據(jù)類型

list1=[1,2,3,'a'] 
print list1 
a=np.array([1,2,3,4,5]) 
b=np.array([[1,2,3],[4,5,6]]) 
c=list(a)  # array到list的轉(zhuǎn)換 
print a,np.shape(a) 
print b,np.shape(b) 
print c,np.shape(c) 

運(yùn)行結(jié)果:

[1, 2, 3, 'a'] # 元素?cái)?shù)據(jù)類型不同,并且用逗號(hào)隔開 
[1 2 3 4 5] (5L,) # 一維數(shù)組,類型用tuple表示 
[[1 2 3] 
 [4 5 6]] (2L, 3L) 
[1, 2, 3, 4, 5] (5L,) 

創(chuàng)建:

    array的創(chuàng)建:參數(shù)既可以是list,也可以是元組.使用對(duì)應(yīng)的屬性shape直接得到形狀

a=np.array((1,2,3,4,5))# 參數(shù)是元組 
b=np.array([6,7,8,9,0])# 參數(shù)是list 
c=np.array([[1,2,3],[4,5,6]])# 參數(shù)二維數(shù)組 
print a,b, 
c.shape() 

   也可以直接改變屬性array的形狀,-1代表的是自己推算。這里并不是T, reshape(())也可以

c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) 
c.shape # (3L, 4L) 
c.shape=4,-1  //c.reshape((2,-1)) 
c  
<pre style="box-sizing: border-box; overflow: auto; font-size: 14px; padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 17.0001px; word-break: break-all; word-wrap: break-word; border: 0px; border-radius: 0px; white-space: pre-wrap; vertical-align: baseline; background-color: rgb(255, 255, 255);">array([[ 1, 2, 3], 
    [ 4, 4, 5], 
    [ 6, 7, 7], 
    [ 8, 9, 10]])  

 
   這里的reshape最終相當(dāng)于是一個(gè)淺拷貝,也就是說還是和原來的書c使用相同的內(nèi)存空間

d=c.reshape((2,-1)) 
d[1:2]=100 
c 
array([[ 1,  2,  3],
    [ 4,  4,  5],
    [100, 100, 100],
    [100, 100, 100]])

   前面在創(chuàng)建數(shù)組的時(shí)候并沒有使用數(shù)據(jù)類型,這里我們也可以使用數(shù)據(jù)類型。默認(rèn)的是int32.

a1=np.array([[1,2,3],[4,5,6]],dtype=np.float64) 
print a1.dtype,a.dtype #float64 int32<pre style="margin-top: 0px; margin-bottom: 0px; line-height: 17.0001px; box-sizing: border-box; overflow: auto; font-size: 14px; padding: 0px; word-break: break-all; word-wrap: break-word; border: 0px; border-radius: 0px; white-space: pre-wrap; vertical-align: baseline; background-color: rgb(255, 255, 255);"> 

前面在創(chuàng)建的時(shí)候我們都是使用的np.array()方法從tuple或者list轉(zhuǎn)換成為array,感覺很是費(fèi)勁,numpy自己提供了很多的方法讓我們自己直接創(chuàng)建一個(gè)array.

arr1=np.arange(1,10,1) #  
arr2=np.linspace(1,10,10) 
print arr1,arr1.dtype 
print arr2,arr2.dtype 
[1 2 3 4 5 6 7 8 9] int32
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.] float64

   np.arange(a,b,c)表示產(chǎn)生從a-b不包括b,間隔為c的一個(gè)array,數(shù)據(jù)類型默認(rèn)是int32。但是linspace(a,b,c)表示的是把a(bǔ)-b平均分成c分,它包括b。   

   有時(shí)候我們需要對(duì)于每一個(gè)元素的坐標(biāo)進(jìn)行賦予不同的數(shù)值,可以使用fromfunction函數(shù)

def fun(i): 
  return i%4+2 
np.fromfunction(fun,(10,)) 
array([ 2., 3., 4., 5., 2., 3., 4., 5., 2., 3.])  

   fromfunction必須支持多維數(shù)組,所以他的第二個(gè)參數(shù)必須是一個(gè)tuple,只能是(10,),(10)是錯(cuò)誤的。

def fun2(i,j): 
  return (i+1)*(j+1) 
np.fromfunction(fun2,(9,9)) 

array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
    [ 2.,  4.,  6.,  8., 10., 12., 14., 16., 18.],
    [ 3.,  6.,  9., 12., 15., 18., 21., 24., 27.],
    [ 4.,  8., 12., 16., 20., 24., 28., 32., 36.],
    [ 5., 10., 15., 20., 25., 30., 35., 40., 45.],
    [ 6., 12., 18., 24., 30., 36., 42., 48., 54.],
    [ 7., 14., 21., 28., 35., 42., 49., 56., 63.],
    [ 8., 16., 24., 32., 40., 48., 56., 64., 72.],
    [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])

        雖然說,這里提供了很多的直接產(chǎn)生array的方式,但是大部分情況我們都是會(huì)從list進(jìn)行轉(zhuǎn)換,因?yàn)樵趯?shí)際的處理中,我們需要從txt加載文件,那樣直接讀入的數(shù)據(jù)顯示存放到list中,需要處理的時(shí)候我們轉(zhuǎn)換到array,因?yàn)?br /> array的設(shè)計(jì)更加符合我們的使用,涉及到矩陣的運(yùn)算在使用mat,那么list主要就是用進(jìn)行元素的索取。

def loaddataSet(fileName):  
  file=open(fileName)  
  dataMat=[] // 
  for line in file.readlines():  
    curLine=line.strip().split('\t')  
    floatLine=map(float,curLine)//這里使用的是map函數(shù)直接把數(shù)據(jù)轉(zhuǎn)化成為float類型  
    dataMat.append(floatLine)  
  return dataMat  

    上面的韓順返回最終的數(shù)據(jù)就是最初的list數(shù)據(jù)集,再根據(jù)不同的處理需求是轉(zhuǎn)化到array還是mat。其實(shí)array是mat的父類,能用mat的地方,array理論上都能傳入。

 元素訪問:    

arr[5] #5 
arr[3:5] #array([3, 4]) 
arr[:5] #array([0, 1, 2, 3, 4]) 
arr[:-1]# array([0, 1, 2, 3, 4, 5, 6, 7, 8]) 
arr[:] #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
arr[2:4]=100 # array([ 0,  1, 100, 100,  4,  5,  6,  7,  8,  9]) 
arr[1:-1:2] #array([ 1, 100,  5,  7]) 2 是間隔 
arr[::-1] #array([ 9,  8,  7,  6,  5,  4, 100, 100,  1,  0])  
arr[5:2:-1]# -1的間隔表示從右向左所以5>2 #array([ 5,  4, 100]) 

   上面是array的一維數(shù)組的訪問方式,我們?cè)賮砜纯炊S的處理方式

print c[1:2]# c[1:2].shape-->(1L, 3L) 
print c[1:2][0] # shape-->(3L,) 
[[4 4 5]]
[4 4 5]
[python] view plain copy 
print c[1] 
print c[1:2] 
[4 4 5]
[[4 4 5]]
[python] view plain copy 
print c[1][2] 
print c[1:4] 
print c[1:4][0][2] 
5
[[ 4  4  5]
 [100 100 100]
 [100 100 100]]
5

   可以看出對(duì)于有:的表達(dá)最終的結(jié)果外面還嵌套一層list的[],。訪問的一定要注意,python最bug的就是,語法
靈活,不管怎樣寫索引語法都是正確的,但是最終的書結(jié)果卻讓你大跌眼鏡。

    還有array的索引最終產(chǎn)生的是一個(gè)一個(gè)原始數(shù)據(jù)的淺拷貝,還和原來的數(shù)據(jù)共用一塊兒內(nèi)存

b=arr[1:6] 
b[:3]=0 
arr #<pre style="box-sizing: border-box; overflow: auto; font-size: 14px; padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 17.0001px; word-break: break-all; word-wrap: break-word; border: 0px; border-radius: 0px; white-space: pre-wrap; vertical-align: baseline; background-color: rgb(255, 255, 255);">array([0, 0, 0, 0, 4, 5, 6, 7, 8, 9]) 

    產(chǎn)生上面的原因是因?yàn)閍rray中直接存放的數(shù)據(jù),拷貝的話直接拿走的是pointer,沒有取走數(shù)據(jù),但是list卻會(huì)直接發(fā)生深拷貝,數(shù)據(jù)指針全部帶走

list1=list(c) 
list1[1]=0 
list1 #上面修改的0并沒有被改變 
[array([1, 2, 3]), 0, array([100, 100, 100]), array([100, 100, 100])]

   除了這些之外還有自己的更加牛掰的方式(只能用array)

   1)使用布爾數(shù)組.感覺甚是強(qiáng)大,就不要自己寫什么判斷語句啦,注意這種方式得到結(jié)果不和原始數(shù)組共享空間。布爾索引僅僅適用于數(shù)組array,list沒資格用。布爾索引最終得到下標(biāo)索引為true的數(shù)據(jù)。索引只能是布爾數(shù)組

a=np.array(a*2) 
a>5 
a[a>5] #  
array([16, 32, 48, 64, 80, 16, 32, 48, 64, 80])

   2)列表索引

      列表索引可以是數(shù)組和list。返回的數(shù)據(jù)不和原來的數(shù)據(jù)共享內(nèi)存。索引可以是list和array

x=np.arange(10) 
index=[1,2,3,4,5] 
arr_index=np.array(index) 
print x 
print x[index] # list索引 
print x[arr_index] # array索引 
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[1 2 3 4 5]

  array和list區(qū)別*2

a=np.arange(10) 
lista=list(a) 
print a*2 
print lista*2 
[ 0 2 4 6 8 10 12 14 16 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  array的廣播

a = np.arange(0, 60, 10).reshape(-1, 1) 
b = np.arange(0, 5) 
print a 
print b 
[[ 0]
 [10]
 [20]
 [30]
 [40]
 [50]]
[0 1 2 3 4]
print np.add(a,b,c) 
[[ 0 1 2 3 4]
 [10 11 12 13 14]
 [20 21 22 23 24]
 [30 31 32 33 34]
 [40 41 42 43 44]
 [50 51 52 53 54]]

總結(jié)

以上所述是小編給大家介紹的python 中的list和array的不同之處及轉(zhuǎn)換問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python 淘寶爬蟲小實(shí)例

    python 淘寶爬蟲小實(shí)例

    雙十一即將到來,電商都在做活動(dòng)打折,但打完折是不是真的優(yōu)惠了,需要我們自己斟酌,畢竟我們不能一直關(guān)注著價(jià)格,也自然不能知道現(xiàn)在的價(jià)格比以前高了還是低了,今天讓我們用Python來爬取一下淘寶吧
    2021-11-11
  • Python實(shí)現(xiàn)霍夫圓和橢圓變換代碼詳解

    Python實(shí)現(xiàn)霍夫圓和橢圓變換代碼詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)霍夫圓和橢圓變換代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python如何快速提取PowerPoint文檔中的圖片

    Python如何快速提取PowerPoint文檔中的圖片

    這篇文章主要為大家通過兩個(gè)示例詳細(xì)介紹一下如何使用Python提取PPT文檔中的圖片,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-10-10
  • Python文件操作指南解鎖三個(gè)txt文件合并技術(shù)

    Python文件操作指南解鎖三個(gè)txt文件合并技術(shù)

    本文將深入介紹如何利用Python編寫腳本,將三個(gè)文本文件中指定的列數(shù)據(jù)合并成一個(gè)新文件,通過豐富的示例代碼和詳細(xì)解釋,幫助掌握這一實(shí)用而靈活的數(shù)據(jù)處理技巧
    2024-01-01
  • Python實(shí)現(xiàn)找出數(shù)組中第2大數(shù)字的方法示例

    Python實(shí)現(xiàn)找出數(shù)組中第2大數(shù)字的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)找出數(shù)組中第2大數(shù)字的方法,涉及Python針對(duì)數(shù)組的排序、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Python?hashlib模塊與subprocess模塊使用詳細(xì)介紹

    Python?hashlib模塊與subprocess模塊使用詳細(xì)介紹

    這篇文章主要介紹了Python?hashlib模塊與subprocess模塊使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • python實(shí)現(xiàn)階乘的三種方法

    python實(shí)現(xiàn)階乘的三種方法

    階乘是基斯頓·卡曼于 1808 年發(fā)明的運(yùn)算符號(hào),是數(shù)學(xué)術(shù)語,一個(gè)正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1,本文給大家介紹了python實(shí)現(xiàn)階乘的三種方法,通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 簡(jiǎn)單了解Python讀取大文件代碼實(shí)例

    簡(jiǎn)單了解Python讀取大文件代碼實(shí)例

    這篇文章主要介紹了簡(jiǎn)單了解Python讀取大文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python安裝twisted的問題解析

    python安裝twisted的問題解析

    我們?cè)谶@篇文章中給大家詳細(xì)整理了python安裝twisted時(shí)遇到的問題以及解決方法,有需要的朋友們參考下。
    2018-08-08
  • Python裝飾器詳細(xì)介紹

    Python裝飾器詳細(xì)介紹

    這篇文章主要介紹了Python裝飾器詳細(xì)講解,包括裝飾器的功能及實(shí)現(xiàn)方法,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03

最新評(píng)論