list 和array

list array解析(总算清楚一点了)

import numpy as np ''' python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。
在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,'a']需要4个指针和四个数据,增加了存储和消耗cpu。
numpy中封装的array有很强大的功能,里面存放的都是相同的数据类型 '''

模块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的转换
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

创建:array的创建:参数既可以是list,也可以是元组.使用对应的属性shape直接得到形状

print '222222222222222222222222222222222222222222\n' a=np.array((1,2,3,4,5))# 参数是元组
b=np.array([6,7,8,9,0])# 参数是list
c=np.array([[1,2,3],[4,5,6]])# 参数二维数组
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产生新的变量' 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产生新的变量
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]] '''
''' 里的reshape最终相当于是一个浅拷贝,也就是说还是和原来的书c使用相同的内存空间 ''' 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产生新的变量
[[ 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 前面在创建数组的时候并没有使用数据类型,这里我们也可以使用数据类型。默认的是int32.

a1=np.array([[1,2,3],[4,5,6]],dtype=np.float64) print a1.dtype,a.dtype #float64 int32

模块5 前面在创建的时候我们都是使用的np.array()方法从tuple或者list转换成为array,感觉很是费劲,numpy自己提供了很多的方法让我们自己直接创建一个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)表示产生从a-b不包括b,间隔为c的一个array,数据类型默认是int32。但是linspace(a,b,c)表示的是把a-b平均分成c分,它包括b。 '''

模块6 有时候我们需要对于每一个元素的坐标进行赋予不同的数值,可以使用fromfunction函数

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)) ''' 虽然说,这里提供了很多的直接产生array的方式,但是大部分情况我们都是会从list进行转换,因为在实际的处理中,我们需要从txt加载文件,那样直接读入的数据显示存放到list中,
需要处理的时候我们转换到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函数直接把数据转化成为float类型
dataMat.append(floatLine) return dataMat #上面的返回最终的数据就是最初的list数据集,再根据不同的处理需求是转化到array还是mat。其实array是mat的父类,能用mat的地方,array理论上都能传入。

模块7 元素访问:

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) print '77777777777777777'
''' 一维数组方法
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 = 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
可以看出对于有:的表达最终的结果外面还嵌套一层list的[],。访问的一定要注意,python最bug的就是,语法
灵活,不管怎样写索引语法都是正确的,但是最终的书结果却让你大跌眼镜。
还有array的索引最终产生的是一个一个原始数据的浅拷贝,还和原来的数据共用一块儿内存 ''' b=arr[1:6]
b[:3]=0 print b #产生上面的原因是因为array中直接存放的数据,拷贝的话直接拿走的是pointer,没有取走数据,但是list却会直接发生深拷贝,数据指针全部带
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)使用布尔数组.感觉甚是强大,就不要自己写什么判断语句啦,注意这种方式得到结果不和原始数组共享空间。
布尔索引仅仅适用于数组array,list没资格用。布尔索引最终得到下标索引为true的数据。索引只能是布尔数组 '''
print '888888888888\n' a=np.array((1,2,3,4,5))# 参数是元组
a=np.array(a*2) print a[a>5] #[ 6 8 10]
print a>5 # [False False True True True]

列表索引可以是数组和list。返回的数据不和原来的数据共享内存。索引可以是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 #大跌眼镜,数组和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>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容