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