最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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ù)的存放的地址,簡單的說就是指針,并非數(shù)據(jù),這樣保存一個list就太麻煩了,例如list1=[1,2,3,'a']需要4個指針和四個數(shù)據(jù),增加了存儲和消耗cpu。

      numpy中封裝的array有很強大的功能,里面存放的都是相同的數(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) 

運行結(jié)果:

[1, 2, 3, 'a'] # 元素數(shù)據(jù)類型不同,并且用逗號隔開 
[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,也可以是元組.使用對應的屬性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最終相當于是一個淺拷貝,也就是說還是和原來的書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ù)據(jù)類型,這里我們也可以使用數(shù)據(jù)類型。默認的是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)建的時候我們都是使用的np.array()方法從tuple或者list轉(zhuǎn)換成為array,感覺很是費勁,numpy自己提供了很多的方法讓我們自己直接創(chuàng)建一個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的一個array,數(shù)據(jù)類型默認是int32。但是linspace(a,b,c)表示的是把a-b平均分成c分,它包括b。   

   有時候我們需要對于每一個元素的坐標進行賦予不同的數(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ù)組,所以他的第二個參數(shù)必須是一個tuple,只能是(10,),(10)是錯誤的。

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的方式,但是大部分情況我們都是會從list進行轉(zhuǎn)換,因為在實際的處理中,我們需要從txt加載文件,那樣直接讀入的數(shù)據(jù)顯示存放到list中,需要處理的時候我們轉(zhuǎn)換到array,因為
array的設計更加符合我們的使用,涉及到矩陣的運算在使用mat,那么list主要就是用進行元素的索取。

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。其實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ù)組的訪問方式,我們再來看看二維的處理方式

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

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

    還有array的索引最終產(chǎn)生的是一個一個原始數(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)生上面的原因是因為array中直接存放的數(shù)據(jù),拷貝的話直接拿走的是pointer,沒有取走數(shù)據(jù),但是list卻會直接發(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ù)組.感覺甚是強大,就不要自己寫什么判斷語句啦,注意這種方式得到結(jié)果不和原始數(shù)組共享空間。布爾索引僅僅適用于數(shù)組array,list沒資格用。布爾索引最終得到下標索引為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)換問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 詳解Python中的Array模塊

    詳解Python中的Array模塊

    這篇文章主要介紹了詳解Python中的Array模塊,Python中的array模塊是一個預定義的數(shù)組,因此其在內(nèi)存中占用的空間比標準列表小得多,同時也可以執(zhí)行快速的元素級別操作,例如添加、刪除、索引和切片等操作,需要的朋友可以參考下
    2023-04-04
  • PHP基于phpqrcode類庫生成二維碼過程解析

    PHP基于phpqrcode類庫生成二維碼過程解析

    這篇文章主要介紹了PHP基于phpqrcode類庫生成二維碼過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • numpy linalg模塊的具體使用方法

    numpy linalg模塊的具體使用方法

    這篇文章主要介紹了numpy linalg模塊的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Pytorch矩陣乘法(torch.mul() 、 torch.mm() 和torch.matmul()的區(qū)別)

    Pytorch矩陣乘法(torch.mul() 、 torch.mm() 和torch.m

    在深度學習和神經(jīng)網(wǎng)絡的世界里,矩陣乘法是一項至關重要的操作,本文主要介紹了Pytorch矩陣乘法,包含了torch.mul() 、 torch.mm() 和torch.matmul()的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python + Flask 實現(xiàn)簡單的驗證碼系統(tǒng)

    Python + Flask 實現(xiàn)簡單的驗證碼系統(tǒng)

    這篇文章主要介紹了Python + Flask 制作一個簡單的驗證碼系統(tǒng),本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 詳解如何將python3.6軟件的py文件打包成exe程序

    詳解如何將python3.6軟件的py文件打包成exe程序

    這篇文章主要介紹了詳解如何將python3.6軟件的py文件打包成exe程序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 使用Python檢測文章抄襲及去重算法原理解析

    使用Python檢測文章抄襲及去重算法原理解析

    文章去重(或叫網(wǎng)頁去重)是根據(jù)文章(或網(wǎng)頁)的文字內(nèi)容來判斷多個文章之間是否重復。這篇文章主要介紹了用Python寫了個檢測文章抄襲,詳談去重算法原理,需要的朋友可以參考下
    2019-06-06
  • pandas檢查和填充缺失值的N種方法總結(jié)

    pandas檢查和填充缺失值的N種方法總結(jié)

    本文主要介紹了pandas檢查和填充缺失值的N種方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 淺談MySQL中的觸發(fā)器

    淺談MySQL中的觸發(fā)器

    這篇文章主要介紹了MySQL中的觸發(fā)器,包括使用觸發(fā)器添加、更新、刪除用戶等操作,需要的朋友可以參考下
    2015-05-05
  • Python?Matplotlib?marker?標記詳解

    Python?Matplotlib?marker?標記詳解

    這篇文章主要介紹了Python?Matplotlib?marker?標記詳解,Matplotlib,風格類似?Matlab?的基于?Python?的圖表繪圖系統(tǒng),詳細內(nèi)容需要的小伙伴可以參考一下
    2022-07-07

最新評論

东乡县| 福海县| 江孜县| 平潭县| 滨海县| 玉林市| 科技| 太仆寺旗| 武清区| 泰宁县| 内黄县| 黔西县| 嘉黎县| 南木林县| 曲阜市| 辽宁省| 东阳市| 金山区| 昌邑市| 来安县| 勃利县| 承德市| 定日县| 荥经县| 武夷山市| 武义县| 榆社县| 兴仁县| 信丰县| 子洲县| 天长市| 桐梓县| 大连市| 武定县| 汾西县| 清新县| 铜陵市| 璧山县| 石柱| 灌阳县| 伊宁县|