Theano 学习笔记

来源:互联网 发布:小米手机数据迁移 编辑:程序博客网 时间:2024/04/29 16:44

Theano 学习笔记—— Numpy入门50题

1: 引入numpy包,并命名为np

import numpy as np

2: 输出numpy版本以及配置

print np.__version__np.__config__.show()

3: 创建一个长度为10的数组

z=np.zeros(10)print z

4: 从命令行执行,获取numpy的add函数的文档信息

python -c "import numpy;numpy.info(numpy.add)"

5:创建一个长度为10的数组,第4个为1

Z=np.zeros(10)Z[4]=1print Z

6: 创建数组,数组值的范围为10-49

Z=np.arange(10,50)print Z

7: 翻转数组

Z_before=np.arange(10)Z_later=Z_before[::-1]print "翻转前:",Z_beforeprint "翻转后:",Z_later#说明:numpy 数组的使用方法:Z_before[start_index:end_index:step_length]

8: 创建3*3数组,数据范围为0-8

Z=np.arange(9).reshape(3,3)print Z

9: 找出数组中非0元素的下标[1,2,0,0,4,0]

z=np.nonzero([1,2,0,0,4,0])print z

10:创建3*3*3的随机数组

z=np.random.random((3,3,3,))print z

11:创建10*10的数组,并找出最大值和最小值

z=np.random.random((10,10))z_max,z_min=z.max(),z.min()print z_max,z_min

12:创建长度为30的随机数组,求其平均值

z=np.random.random(30)print z.mean()

13:创建5*5的数组,1234刚好在对角线的下方

z=np.diag(1+np.arange(4),k=-1)print z#diag的用法,第一个参数为数组,如果是1维度,则转换成2维度,数组作为对角线上的值#如果是二维,则返回对角元素#第二个参数,用来表示偏移

14:创建8*8的checkboard(0 1 相间)

z=np.zeros((8,8),dtype=int)z[1::2,0::2]=1z[0::2,1::2]=1print z

15:使用tile函数完成checkboard的创建

z=np.tile(np.array([[0,1],[1,0]]),(4,4))print z#tile 重复

16:对5*5的数组归一化0-1归一化

z=np.random.random((5,5))z_max,z_min=z.max(),z.min()z=(z-z_min)/(z_max-z_min)print z

17:对5*3的3*2的数组相乘

z=np.dot(np.ones((5,3)),np.ones((3,2)))print z

18:建5*5的数组,每一行的值为0-4

z=np.zeros((5,5))z=z+np.arange(5)print z

19:创建一个长度为10的数组,值在0-1 之间(间隔一样),不包括0 1

z=np.linspace(0,1,12,endpoint=True)[1:-1]print z

20:建长度为10的随机数组并排序

z=np.random.random(10)z.sort()print z

21:个随机数组A和B,判断是否相等

A=np.random.randint(0,2,5)B=np.random.randint(0,2,5)equal=np.allclose(A,B)print Aprint Bprint equal#其中allclose是element-wise的,相等的判断也可以设置误差范围

22:创建一个只读数组

z=np.zeros(10)z.flags.writeable=Falsez[0]=1

23:10*2的直角坐标转换到极坐标

z=np.random.random((10,2))x,y=z[:,0],z[:,1]R=np.sqrt(x**2+y**2)T=np.arctan2(y,x)print (R)print (T)

24:创建长度为10的数组,并将最大值替换成0

z=np.random.random(10)print zz[z.argmax()]=0print z

25:创建数组,x和y坐标覆盖[0,1]*[0,1]

z=np.zeros((10,10),[('x','float'),('y','float')])z['x'],z['y']=np.meshgrid(np.linspace(0,1,10),np.linspace(0,1,10))print z

26:输出numpy各种数据类型的最大和最小值

for dtype in [np.int8, np.int32, np.int64]:   print(np.iinfo(dtype).min)   print(np.iinfo(dtype).max)for dtype in [np.float32, np.float64]:   print(np.finfo(dtype).min)   print(np.finfo(dtype).max)   print(np.finfo(dtype).eps)

27:创建有结构的数组,用来表示position(x,y)和颜色(R,G,B)

Z = np.zeros(10, [ ('position', [ ('x', float, 1),                                   ('y', float, 1)]),                    ('color',    [ ('r', float, 1),                                   ('g', float, 1),                                   ('b', float, 1)])])print(Z)

28:求(10,2)数组中,点到点的距离

z=np.random.random((10,2))x,y=np.atleast_2d(z[:,0]),np.atleast_2d(z[:,1])d=np.sqrt((x-x.T)**2+(y-y.T)**2)print d

29:faster with scipy

import scipyimport scipy.spatialz=np.random.random((10,2))d=scipy.spatial.distance.cdist(z,z)print d

30:
1,2,3,4,5
6,,,7,8
,,9,10,11
读取上述3行内容的文件(不包含#)

z=np.genfromtxt("missing.data",delimiter=",")

31:生成二维高斯函数

x,y=np.meshgrid(np.linspace(-1,1,10),np.linspace(-1,1,10))D=np.sqrt(x*x+y*y)sigma,mu=1.0,1.0G=np.exp(-((D-mu)**2/(2.0*sigma**2)))print G

32:将p个数值随机放到二维数组里面

n = 10p = 3Z = np.zeros((n,n))np.put(Z, np.random.choice(range(n*n), p, replace=False),1)print Z

33:减去数组每一行的均值

X = np.random.rand(2, 3)Y=X-X.mean(axis=1,keepdims=True)print Xprint Y

34:根据第n列对数组排序

z=np.random.randint(0,10,(3,3))print zprint (z[z[:,1].argsort()])

35:判断2D的数组,是否含有null的列

z=np.random.randint(0,3,(3,10))print (~Z.any(axis=0)).any()

36:寻找数组中离给定数值n最近的数

z=np.random.uniform(0,1,10)x=0.5m=z.flat[np.abs(z-x).argmin()]print zprint m

37创建可便利的函数,产生10个数值组成新的数组

def generate():    for x in xrange(10):        yield xz=np.fromiter(generate(),dtype=float,count=-1)print z

38:数组计数

Z = np.ones(10)I = np.random.randint(0,len(Z),20)Z += np.bincount(I, minlength=len(Z))print(Z)

39:带权重的计数

X = [1,2,3,4,5,6]I = [1,3,9,3,4,1]F = np.bincount(I,X)print(F)

40:a(w,h,3)的图片(dtype=ubyte),计算不同color的数量

w,h=16,16I=np.random.randint(0,2,(h,w,3)).astype(np.ubyte)F=I[...,0]*256*256+I[...,1]*256+I[...,2]n=len(np.unique(F))print nprint np.unique(I)

41:Considering a four dimensions array, how to get sum over the last two axis at once ?

A = np.random.randint(0,10,(3,4,3,4))sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1)print(sum)

42:Considering a one-dimensional vector D, how to compute means of subsets of D using a vector S of same size describing subset indices ?

D = np.random.uniform(0,1,100)S = np.random.randint(0,10,100)D_sums = np.bincount(S, weights=D)D_counts = np.bincount(S)D_means = D_sums / D_countsprint(D_means)

43:获取成绩的对角矩阵

A=np.ones((3,2))B=np.ones((2,3))#直接算np.diag(np.dot(A, B))# Fast version,转置之后,行与行相乘,相当于原来的行乘列再相加;np.sum(A * B.T, axis=1)# Faster versionnp.einsum("ij,ji->i", A, B)

44:对于数据[1,2,3,4,5],在数字之间连续插入3个0

z=np.array([1,2,3,4,5])nz=3z0=np.zeros(len(z)+(len(z)-1)*nz)z0[::nz+1]=zprint z0

45:一个(5,5,3)的数组,如何与(5,5)的数组相乘

A = np.ones((5,5,3))B = 2*np.ones((5,5))print(A * B[:,:,None])

46:交换数组的两行

A=np.arange(9).reshape(3,3)print A#表示,取,1,0行,赋值给0,1行A[[0,1]]=A[[1,0]]print A

47:Consider a set of 10 triplets describing 10 triangles (with shared vertices), negate find the set of unique line segments composing all the triangles

faces = np.random.randint(0,100,(10,3))F = np.roll(faces.repeat(2,axis=1),-1,axis=1)F = F.reshape(len(F)*3,2)F = np.sort(F,axis=1)G = F.view( dtype=[('p0',F.dtype),('p1',F.dtype)] )G = np.unique(G)print(G)

48:C是一个bincount,需要产生一个数组,使得 np.bincount(A)==C

C = np.bincount([5,1,2,3,4,4,6])A = np.repeat(np.arange(len(C)), C)print(A)print np.bincount(A)==C

49:移动窗口的平均值,MA

def moving_average(a, n=3) :    ret = np.cumsum(a, dtype=float)    ret[n:] = ret[n:] - ret[:-n]    return ret[n - 1:] / nZ = np.arange(20)print(moving_average(Z, n=3))

参考:
numpy100题

以上内容主要是参考numpy100题(实际60题),摘取了觉得更有意义的49题,并对函数进行了部分注释和说明,实例也更家明显;

喜欢notebook的同学也可以使用以下文件,可以直接看到输出:
http://download.csdn.net/detail/wo1185246535/9314017

1 0
原创粉丝点击