list 和array

list array解析(總算清楚一點(diǎn)了)

import numpy as np ''' python中的list是python的內(nèi)置數(shù)據(jù)類型乏沸,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同诈唬。
在list中的數(shù)據(jù)類型保存的是數(shù)據(jù)的存放的地址胧瓜,簡(jiǎn)單的說(shuō)就是指針,并非數(shù)據(jù)妓蛮,這樣保存一個(gè)list就太麻煩了空繁,例如list1=[1,2,3,'a']需要4個(gè)指針和四個(gè)數(shù)據(jù)殿衰,增加了存儲(chǔ)和消耗cpu。
numpy中封裝的array有很強(qiáng)大的功能盛泡,里面存放的都是相同的數(shù)據(jù)類型 '''

模塊1 array list 基本展示

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) ''' [1, 2, 3, 'a']
[1 2 3 4 5] (5L,)
[[1 2 3]
[4 5 6]] (2L, 3L)
[1, 2, 3, 4, 5] (5L,) '''

''' whos
Variable Type Data/Info


a ndarray 5L: 5 elems, type int32, 20 bytes
b ndarray 2Lx3L: 6 elems, type int32, 24 bytes
c list n=5
list1 list n=4
np module <module 'numpy' from 'C:<...>ages\numpy_init_.pyc'> '''

模塊2

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

print '222222222222222222222222222222222222222222\n' 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 print c.shape #[1 2 3 4 5] [6 7 8 9 0] (2L, 3L) #print a,b, #[1 2 3 4 5] [6 7 8 9 0] #(2L, 3L) 注意:print 后面加上 \n 換行;注意:print a,b b后面沒有,換行了傲诵,如果有,不換行

模塊3 也可以直接改變屬性array的形狀凯砍,-1代表的是自己推算

print '33333333333333333333333333333333333333333333\n' c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) print c.shape # (3L, 4L)
c.shape=4,-1
print c
c.reshape(2,-1) print c print 'reshape產(chǎn)生新的變量' x = c.reshape(2,-1) print x ''' 33333333333333333333333333333333333333333333

(3L, 4L)
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
reshape產(chǎn)生新的變量
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]] '''
''' 里的reshape最終相當(dāng)于是一個(gè)淺拷貝箱硕,也就是說(shuō)還是和原來(lái)的書c使用相同的內(nèi)存空間 ''' x[0]=1000
print x print c ''' 33333333333333333333333333333333333333333333

(3L, 4L)
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
[[ 1 2 3]
[ 4 4 5]
[ 6 7 7]
[ 8 9 10]]
reshape產(chǎn)生新的變量
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]]
[[1000 1000 1000 1000 1000 1000]
[ 6 7 7 8 9 10]]
[[1000 1000 1000]
[1000 1000 1000]
[ 6 7 7]
[ 8 9 10]] '''

模塊4 前面在創(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

模塊5 前面在創(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。 '''

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

print '666666666666666666\n'
def fun(i): return i%4+2
print np.fromfunction(fun,(10,)) #[ 2. 3. 4. 5. 2. 3. 4. 5. 2. 3.]
def fun2(i,j): return (i+1)*(j+1) print np.fromfunction(fun2,(9,9)) ''' 雖然說(shuō)薛耻,這里提供了很多的直接產(chǎn)生array的方式,但是大部分情況我們都是會(huì)從list進(jìn)行轉(zhuǎn)換赏陵,因?yàn)樵趯?shí)際的處理中饼齿,我們需要從txt加載文件,那樣直接讀入的數(shù)據(jù)顯示存放到list中蝙搔,
需要處理的時(shí)候我們轉(zhuǎn)換到array,因?yàn)閍rray的設(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理論上都能傳入。

模塊7 元素訪問(wèn):

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) print '77777777777777777'
''' 一維數(shù)組方法
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]) '''

我們?cè)賮?lái)看看二維的處理方式

c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) print c[1] print c[1:2] print c[1][2] print c[1:4] print c[1:4][0][2] ''' [4 5 6 7]
[[4 5 6 7]]
6
[[ 4 5 6 7]
[ 7 8 9 10]]
6
可以看出對(duì)于有:的表達(dá)最終的結(jié)果外面還嵌套一層list的[]赐写,鸟蜡。訪問(wèn)的一定要注意,python最bug的就是挺邀,語(yǔ)法
靈活揉忘,不管怎樣寫索引語(yǔ)法都是正確的,但是最終的書結(jié)果卻讓你大跌眼鏡悠夯。
還有array的索引最終產(chǎn)生的是一個(gè)一個(gè)原始數(shù)據(jù)的淺拷貝癌淮,還和原來(lái)的數(shù)據(jù)共用一塊兒內(nèi)存 ''' b=arr[1:6]
b[:3]=0 print b #產(chǎn)生上面的原因是因?yàn)閍rray中直接存放的數(shù)據(jù),拷貝的話直接拿走的是pointer沦补,沒有取走數(shù)據(jù)乳蓄,但是list卻會(huì)直接發(fā)生深拷貝,數(shù)據(jù)指針全部帶
list1=list(c)
list1[1]=0 print list1 #上面修改的0并沒有被改變
print c #[array([1, 2, 3, 4]), 0, array([ 7, 8, 9, 10])]

模塊8

''' 除了這些之外還有自己的更加牛掰的方式(只能用array)
1)使用布爾數(shù)組.感覺甚是強(qiáng)大夕膀,就不要自己寫什么判斷語(yǔ)句啦虚倒,注意這種方式得到結(jié)果不和原始數(shù)組共享空間美侦。
布爾索引僅僅適用于數(shù)組array,list沒資格用魂奥。布爾索引最終得到下標(biāo)索引為true的數(shù)據(jù)菠剩。索引只能是布爾數(shù)組 '''
print '888888888888\n' a=np.array((1,2,3,4,5))# 參數(shù)是元組
a=np.array(a*2) print a[a>5] #[ 6 8 10]
print a>5 # [False False True True True]

列表索引可以是數(shù)組和list。返回的數(shù)據(jù)不和原來(lái)的數(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索引

print '8-1' a=np.arange(10)
lista=list(a) print a2
print lista
2 #大跌眼鏡具壮,數(shù)組和list的乘積很嚇人

''' [ 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] '''

模塊9 array的廣播

print '9\n' a = np.arange(0, 60, 10).reshape(-1, 1)
b = np.arange(0, 5) print a print b print np.add(a,b)</pre>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哈蝇,隨后出現(xiàn)的幾起案子棺妓,更是在濱河造成了極大的恐慌,老刑警劉巖炮赦,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怜跑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吠勘,警方通過(guò)查閱死者的電腦和手機(jī)性芬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剧防,“玉大人植锉,你說(shuō)我怎么就攤上這事∷薪” “怎么了汽煮?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棚唆。 經(jīng)常有香客問(wèn)我暇赤,道長(zhǎng),這世上最難降的妖魔是什么宵凌? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任鞋囊,我火速辦了婚禮,結(jié)果婚禮上瞎惫,老公的妹妹穿的比我還像新娘溜腐。我一直安慰自己,他們只是感情好瓜喇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布挺益。 她就那樣靜靜地躺著,像睡著了一般乘寒。 火紅的嫁衣襯著肌膚如雪望众。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音烂翰,去河邊找鬼夯缺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甘耿,可吹牛的內(nèi)容都是我干的踊兜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼佳恬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捏境!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起毁葱,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤典蝌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后头谜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸠澈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年柱告,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑陈。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡际度,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涵妥,到底是詐尸還是另有隱情乖菱,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布蓬网,位于F島的核電站窒所,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帆锋。R本人自食惡果不足惜吵取,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锯厢。 院中可真熱鬧皮官,春花似錦、人聲如沸实辑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剪撬。三九已至摄乒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缺狠。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工问慎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挤茄。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓如叼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親穷劈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笼恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容