Theano 学习笔记

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]=1
print Z

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

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

7: 翻转数组

Z_before=np.arange(10)
Z_later=Z_before[::-1]
print "翻转前:",Z_before
print "翻转后:",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]=1
z[0::2,1::2]=1
print 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 A
print B
print equal
#其中allclose是element-wise的,相等的判断也可以设置误差范围

22:创建一个只读数组

z=np.zeros(10)
z.flags.writeable=False
z[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 z
z[z.argmax()]=0
print 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 scipy
import scipy.spatial
z=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.0
G=np.exp(-((D-mu)**2/(2.0*sigma**2)))
print G

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

n = 10
p = 3
Z = 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 X
print Y

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

z=np.random.randint(0,10,(3,3))
print z
print (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.5
m=z.flat[np.abs(z-x).argmin()]
print z
print m

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

def generate():
    for x in xrange(10):
        yield x
z=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,16
I=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 n
print 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_counts
print(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 version
np.einsum("ij,ji->i", A, B)

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

z=np.array([1,2,3,4,5])
nz=3
z0=np.zeros(len(z)+(len(z)-1)*nz)
z0[::nz+1]=z
print 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:] / n
Z = np.arange(20)
print(moving_average(Z, n=3))

参考:
numpy100题

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

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

你可能感兴趣的:(python,numpy)