numpy语句,numpy.
chanong
|这些有用的片段经常出现在面试中,也可以用作日常练**题。
1.导入numpy
将numpy 导入为np
2.输出numpy信息
打印(np.__version__)np.show_config()
3. 创建一个空向量
Z=np.zeros(10)print(Z)
4. 获取numpy 函数的文档
python -c '导入numpy; numpy.info(numpy.add)'
5. 创建一个大小为10 的空向量,但第五个值为1。
Z=np.zeros(10)Z[4]=1print(Z)
6. 创建一个值为10 到49 的向量
Z=np.arange(10,50)print(Z)
7. 反转向量(第一个元素成为最后一个元素)
Z=np.arange(50)Z=Z[:-1]
8. 创建一个包含0 到8 值的3x3 矩阵
Z=np.arange(9).reshape(3,3)print(Z)
9. 从[1,2,0,0,4,0]中查找非零元素的下标。
nz=np.nonzero([1,2,0,0,4,0])print(nz)
10. 创建一个3x3 单位矩阵
Z=np.eye(3)print(Z)
11. 创建一个具有随机值的3x3x3 数组
Z=np.random.random((3,3,3))print(Z)
12. 创建一个具有随机值的10x10 数组并找到最小值和最大值
Z=np.random.random((10,10))Zmin, Zmax=Z.min(), Z.max()print(Zmin, Zmax)
13. 创建一个大小为30 的随机向量并求平均值。
Z=np.random.random(30)m=Z.mean()print(m)
14. 创建一个二维数组,边界为1,内部为0。
Z=np.ones((10,10))Z[1:-1,1:-1]=0
15.下列方程的结果是什么?
0 * np.nannp.nan==np.nan np.inf np.nannp.nan - np.nan0.3==3 * 0.1
16. 创建一个5 5 矩阵,对角线值为1,2,3,4
Z=np.diag(1+np.arange(4),k=-1)print(Z)
17. 创建一个8x8 矩阵并用0 和1 之间的空格填充它。
Z=np.zeros((8,8),dtype=int)Z[1:2,2]=1Z[:2,1:2]=1print(Z)
18. 形状为(6, 7, 8) 的数组中第100 个元素的下标(x, y, z) 是多少?
打印(np.unravel_index(100,(6,7,8)))
19. 使用tile 函数创建一个8x8 0,1 间距的填充矩阵。
Z=np.tile( np.array([[0,1],[1,0]]), (4,4))print(Z)
20. 标准化5x5 随机矩阵
Z=np.random.random((5,5))Zmax, Zmin=Z.max(), Z.min()Z=(Z - Zmin)/(Zmax - Zmin)print(Z)
21. 创建一个自定义数据类型,将颜色描述为4 个无符号字节(RGBA)。
颜色=np.dtype([('r', np.ubyte, 1),('g', np.ubyte, 1),('b', np.ubyte, 1),('a', np.乌拜特,1)])
22. 5x3和3x2矩阵的乘法(实数矩阵乘积)
Z=np.dot(np.ones((5,3)), np.ones((3,2)))print(Z)
23. 给定一个一维数组,对3 到8 中的所有元素求反。
# 作者: 叶夫根尼·布罗夫斯基Z=np.arange(11)Z[(3 Z) (Z=8)] *=-1
24.以下脚本的输出是什么?
# 作者: Jake VanderPlasprint(sum(range(5),-1))from numpy import *print(sum(range(5),-1))##结果:10
25. 对于整数向量Z,以下哪个方程是正确的?
Z**Z2 Z 2Z - Z1j*ZZ/1/1ZZ #其他都是合法的
26.下列方程的结果是什么?
np.array(0) //np.array(0)np.array(0) //np.array(0.)np.array(0)/np.array(0)np.array(0)/np .数组(0。)
27. 如何舍入
# Author: Charles R HarrisZ=np.random.uniform(-10,+10,10)print (np.trunc(Z + np.copysign(0.5, Z)))
28. 使用五种不同的方法提取随机数组的整数部分
Z=np.random.uniform(0,10,10)print (Z - Z%1)print (np.floor(Z))print (np.ceil(Z)-1)print (Z.astype(int) )print (np.trunc(Z))
29. 创建一个5x5 矩阵,其值范围为0 到4
Z=np.zeros((5,5))Z +=np.arange(5)print(Z)
30. 编写一个生成器函数,生成10 个整数并使用它们构造一个数组。
defgenerate():for x in xrange(10):yield xZ=np.fromiter(generate(),dtype=float,count=-1)print(Z)
31、创建一个大小为10的向量,其值范围为0到1(不含)
Z=np.linspace(0,1,12,端点=True)[1:-1]打印(Z)
32. 创建并排序大小为10 的随机向量
Z=np.random.random(10)Z.sort()print(Z)
33. 如何比np.sum 更快地对小数组求和?
# 作者: 叶夫根尼·布罗夫斯基Z=np.arange(10)np.add.reduce(Z)
34. 考虑检查两个随机数组A 和B 是否相等。
A=np.random.randint(0,2,5)B=np.random.randint(0,2,5)equal=np.allclose(A,B)print(equal)
35. 使数组不可变(只读)
Z=np.zeros(10)Z.flags.writeable=FalseZ[0]=1
36.表示笛卡尔坐标转换为极坐标的随机10x2矩阵
X,Y=Z[:0], Z[:1]R=np.sqrt(X**2+Y**2)T=np.arctan2(Y,X)print(R)print(T )
37. 创建一个大小为10 的随机向量,并将最大值替换为0。
Z=np.random.random(10)Z[Z.argmax()]=0print(Z)
38. 创建一个结构化数组,其x 和坐标覆盖区域[0,1]x[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)
39. 给定两个数组X 和Y,构造柯西矩阵C (Cij=1/(xi yj))。
# 作者: Evgeni BurovskiX=np.arange(8)Y=X + 0.5C=1.0/np.subtract.outer(X, Y)print(np.linalg.det(C))
40.打印每个numpy标量类型的可表示的最小值和最大值。
对于[np.int8、np.int32、np.int64] 中的dtype :print(np.iinfo(dtype).min)print(np.iinfo(dtype).max)对于[np.float32、np.float64] 中的dtype第:章打印(np.finfo(dtype).min)打印(np.finfo(dtype).max)打印(np.finfo(dtype).eps)
41.如何打印数组的所有值?
np.set_printoptions(threshold=np.nan)Z=np.zeros((25,25))print(Z)
42. 如何在数组中找到最接近的值(给定标量)?
Z=np.arange(100)v=np.random.uniform(0,100)index=(np.abs(Z-v)).argmin()print(Z[index])
43. 创建一个表示位置(x,y) 和颜色(r,g,b) 的结构化数组。
Z=np.zeros(10, [ ('位置', [ ('x', float, 1),('y', float, 1)]),('颜色', [ ('r', float, 1),('g', 浮点数, 1),('b', 浮点数, 1)])])print(Z)
44. 求形状为(100,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)# scipyimport scipy# 更快。感谢Gavin Heverly-Coulson (#issue 1)import scipy.spatialZ=np.random.random((10, 2))D=scipy.spatial.distance.cdist(Z,Z)print(D)
45. 如何将浮点(32 位)数组转换为整数(32 位)?
Z=np.arange(10, dtype=np.int32)Z=Z.astype(np.float32, 复制=False)
46.您想读取以下格式的文件吗?
#-------------1,2,3,4,56,7,8,9,10,11#------------ - -- Z=np.genfromtxt('missing.dat', delimiter=',')
47. numpy 数组的枚举还可以用哪些其他格式表示?
Z=np.arange(9).reshape(3,3) 对于索引,np.ndenumerate(Z): 的值print(index, value): 对于np.ndindex(Z.shape) 的索引
48. 生成二维高斯数组
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, 0.0G=np.exp(-( (D-mu)**2/(2.0 * sigma**2 ) ) )print(G)
49. 如何在二维数组中随机放置p个元素?
# Author: Divakarn=10p=3Z=np.zeros((n,n))np.put(Z, np.random.choice(range(n*n), p, 替换=False),1)
50. 从矩阵中减去每行的平均值。
# Author: Warren WeckesserX=np.random.rand(5, 10)# 最新版本的numpyY=X - X.mean(axis=1, keepdims=True)# 旧版本的numpyY=X - X.mean(axis=1 ) ).重塑(-1, 1)
51. 如何对数组的第n列进行排序
# Author: Steve TjoaZ=np.random.randint(0,10,(3,3))print(Z)print(Z[Z[:1].argsort()])
52. 如何判断给定的二维数组是否有空列?
# Author: Warren WeckesserZ=np.random.randint(0,3,(3,10))print((~Z.any(axis=0)).any())
53. 在数组中查找最接近给定值的值
Z=np.random.uniform(0,1,10)z=0.5m=Z.flat[np.abs(Z - z).argmin()]print(m)
54.创建一个带有name属性的数组类
class NamedArray(np.ndarray):def __new__(cls, array, name='no name'):obj=np.asarray(array).view(cls)obj.name=namereturn objdef __array_finalize__(self, obj):obj 为None 如果第:章
55.对于给定的向量,如何将第二个向量索引的每个元素加1(包括重复索引)
# Author: Brett OlsenZ=np.ones(10)I=np.random.randint(0,len(Z),20)Z +=np.bincount(I, minlength=len(Z))print(Z)
56. 如何根据索引列表(I)将向量(X)的元素添加到数组(F)
# Author: Alan G IsaacX=[1,2,3,4,5,6]I=[1,3,9,3,4,1]F=np.bincount(I,X)print(F)
57.(w,h,3)图像(dtype=ubyte),计算唯一颜色的数量
# 作者: Nadav Horeshw,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(np.unique(I))
58. 考虑一个4 维数组,如何同时获得最后两个轴的和?
A=np.random.randint(0,10,(3,4,3,4))sum=A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1 )打印(总计)
59. 对于一维向量D,使用与子集大小相同的向量S 计算D 子集的平均值。
# Author: Jaime Fernandez Del RioD=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)
60.如何求内积的对角线?
# 作者: Mathieu Blondel# 慢速版本np.diag(np.dot(A, B))# 快速版本np.sum(A * B.T, axis=1)# 快速版本np.einsum('ij,ji-i', A、B)。
61.向量[1,2,3,4,5],构造一个新向量,每个值之间包含三个连续的0?
# 作者: Warren WeckesserZ=np.array([1,2,3,4,5])nz=3Z0=np.zeros(len(Z) + (len(Z)-1)*(nz))Z0 [:nz ] +1]=Zprint(Z0)
62. 将维度(5,5,3) 的数组乘以维度(5,5) 的数组?
A=np.ones((5,5,3))B=2*np.ones((5,5))print(A * B[:无])
63. 交换数组的两行?
# Author: Eelco HoogendoornA=np.arange(25).reshape(5,5)A[[0,1]]=A[[1,0]]print(A)
64. 对于描述10 个三角形(共享顶点)的10 个三元组的集合,找到构成所有三角形的唯一线段集合。
# Author: Nicolas P. Rougeerfaces=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)
65. 如何生成数组A,使得bincount 数组C,np.bincount(A)==C
# Author: Jaime Fernandez del Rio C=np.bincount([1,1,2,3,4,4,6])A=np.repeat(np.arange(len(C)), C)print (A)
66. 使用数组上的滑动窗口计算平均值?
# 作者: Jaime Fernndez del Riodef move_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))
67. 为一维数组Z构造一个二维数组。第一行是(Z[0], Z[1], Z[2]) ,随后的每一行移位1(最后一行是(Z[3] ] ,Z[2],Z [1] )
# 作者: Joe Kington/Erik Rigtorpfrom numpy.lib import stride_tricksdef moving(a, window):shape=(a.size - window + 1, window)strides=(a.itemsize, a.itemsize)return stride_tricks.as_strided(a, Shape=形状,步幅=步幅)Z=滚动(np.arange(10),3)打印(Z)
68. 如何反转布尔值或更改浮点数的符号?
# 作者: Nathaniel J. SmithZ=np.random.randint(0,2,100)np.逻辑_not(arr, out=arr)Z=np.random.uniform(-1.0,1.0,100)np.negative(arr, out=可)
69. 给定描述一条直线(2d)的两组点P0、P1 和点p,如何计算从p 到每条直线i 的距离(P0[i], P1[i])?
def 距离(P0, P1, p):T=P1 - P0L=(T**2).sum(axis=1)U=-((P0[:0]-p[.0])* T[:0] + (P0[:1]-p[.1])*T[:1])/LU=U.reshape(len(U),1)D=P0 + U*T - 预返回np.sqrt((D**2).sum(axis=1))P0=np.random.uniform(-10,10,(10,2))P1=np.random。均匀(-10,10,(10,2))p=np.random.uniform(-10,10,(1,2))打印(距离(P0,P1,p))
70. 两对点P0 和P1 表示一条直线(2d) 和一组点P。如何计算每个点j(P[j])到每条线i(P0[i],P1[i])])的距离?
# 作者: Italmassov Kuanysh# 基于上一个问题的距离函数P0=np.random.uniform(-10, 10, (10,2))P1=np.random.uniform(-10,10,(10,2) ) )p=np.random.uniform(-10, 10, (10,2))print np.array([p_i 与p_i(P0,P1,p_i) 的距离])
71. 对于任何数组,编写一个函数来提取以固定形状的某个元素为中心的子部分(如果需要,可以输入填充值)
# Author: Nicolas RougeerZ=np.random.randint(0,10,(10,10))shape=(5,5)fill=0position=(1,1)R=np.ones(shape, dtype=Z.dtype )*fillP=np.array(list(position)).astype(int)Rs=np.array(list(R.shape)).astype(int)Zs=np.array(list(Z.shape))。 astype(int)R_start=np.zeros((len(shape),)).astype(int)R_stop=np.array(list(shape)).astype(int)Z_start=(P-Rs//2)Z_stop=(P+Rs//2)+Rs%2R_start=(R_start - np.minimum(Z_start,0)).tolist()Z_start=(np.maximum(Z_start,0)).tolist()R_stop=np.最小值(R_start, (R_stop - np.maximum(Z_stop-Zs,0))).tolist()Z_stop=(np.minimum(Z_stop,Zs)).tolist()r=[开始切片(start,stop) ,停止在zip(R_start,R_stop)]z=[开始,停止在zip(Z_start,Z_stop) 切片(开始,停止)]R[r]=Z[z]print(Z)print(R)
72.如何生成数组Z=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],数组R=[[1,2,3], 4]、[2,3,4,5]、[3,4,5,6]、[11,12,13,14]]?
# Author: Stefan van der WaltZ=np.arange(1,15,dtype=uint32)R=stride_tricks.as_strided(Z,(11,4),(4,4))print(R)
73.计算矩阵的秩
# Author: Stefan van der WaltZ=np.random.uniform(0,1,(10,10))U, S, V=np.linalg.svd(Z) # 奇异值分解rank=np.sum(S 1e-十)
74. 如何找到数组中出现次数最多的值?
Z=np.random.randint(0,10,50)print(np.bincount(Z).argmax())
75. 从随机10x10 矩阵中提取所有连续的3x3 块
# Author: Chris BarkerZ=np.random.randint(0,5,(10,10))n=3i=1 + (Z.shape[0]-3)j=1 + (Z.shape[1]-3 )C=stride_tricks.as_strides(Z, shape=(i, j, n, n), stride=Z.stride + Z.stride)print(C)
76. 创建一个二维数组子类,使得Z[i,j]==Z[j,i]。
# 作者: Eric O. Lebigot# Note: 是使用索引类的二维模型Symmetric(np.ndarray):def __setitem__(self, (i,j), value):super(Symetric, self).__setitem__((i,j) ) 仅适用于数组和值集), value)super(Symetric, self).__setitem__((j,i), value)def symetric(Z):return np.asarray(Z + Z.T - np.diag(Z .diagonal) ())).view(对称)S=对称(np.random.randint(0,10,(5,5)))S[2,3]=42print(S)
77. 如何立即计算一组p 个形状为(n,n) 的矩阵与一组p 个形状为(n,1) 的向量的乘积之和?(结果形状将为(n, 1 ))
# 作者: Stefan van der Waltp, n=10, 20M=np.ones((p,n,n))V=np.ones((p,n,1))S=np.tensordot(M, V, axis=[[0, 2], [0, 1]])print(S)# :# 这是有效的,因为M 是(p,n,n)# V 是(p,n,1)#。将轴0 和0(M 和V 是独立的)、# 和2 和1 配对以保存(n,1) 向量。
78. 考虑16x16 数组(块大小为4x4),如何获得块的总和?
# Author: Robert KernZ=np.ones(16,16)k=4S=np.add.reduceat(np.add.reduceat(Z, np.arange(0, Z.shape[0], k), axis=0 ),np.arange(0, Z.shape[1], k), axis=1)
79. 如何使用numpy 数组实现生命游戏?
# 作者: Nicolas Rougeerdef iterate(Z):# 邻居数量N=(Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +Z[1: -1] ,0:-2] + Z[1:-1,2:] +Z[2:0:-2] + Z[2:1:-1] + Z[2:2:])# 应用规则诞生=(N==3) (Z[1:-1,1:-1]==0)生存=((N==2) | (N==3)) (Z[1:-1,1:-1]==1) Z[.]=0Z[1:-1,1:-1][出生| 生存]=1返回ZZ=np.random.randint(0,2,(50,50)) for i in range (100): Z=迭代(Z)
80.获取数组的最多n个值
Z=np.arange(10000)np.random.shuffle(Z)n=5# 慢速打印(Z[np.argsort(Z)[-n:]])# 快速打印(Z[np.argpartition(-Z, n) [:n]])
81. 笛卡尔积的构造(各个项的组合)
# Author: Stefan Van der Waltdef cartesian(arrays):arrays=[np.asarray(a) for a in arrays]shape=(len(x) for x in arrays)ix=np.indices(shape, dtype=int)ix=ix.reshape(len(arrays), -1).Tfor n, arr in enumerate(arrays):ix[: n]=arrays[n][ix[: n]]return ixprint (([1, 2, 3], [4, 5], [6, 7])))
82. 从常规数组创建记录数组
Z=np.array([('你好', 2.5, 3),('世界', 3.6, 2)])R=np.core.records.fromarrays(Z.T,names='col1,col2,col3',格式='S8, f8, i8')
83. 对于一个大向量Z,使用三种不同的方法计算Z 的立方。
Author: Ryan G.x=np.random.rand(5e7)%timeit np.power(x,3)1 个循环,每个循环最多3: 574 毫秒%timeit x*x*x1 个循环,每个循环最多3: 429 毫秒%timeit np.einsum('i,i,i-i',x,x,x)1 个循环,每个循环最多3: 244 ms
84. 形状为(8,3) 和(2,2) 的两个数组A 和B,无论B 元素的顺序如何,如何找到包含B 每一行元素的A 行?
# 作者: Gabe SchwartzA=np.random.randint(0,5,(8,3))B=np.random.randint(0,5,(2,2))C=(A[. np. newaxis, np.newaxis]==B)rows=(C.sum(axis=(1,2,3))=B.shape[1]).nonzero()[0]print(rows)
85. 10x3矩阵,提取值不等的行(例如[2,2,3])
# Author: Robert KernZ=np.random.randint(0,5,(10,3))E=np.逻辑_and.reduce(Z[:1:]==Z[:-1], axis=1) U=Z[~E] 打印(Z) 打印(U)
86.将int向量转换为矩阵二进制表示
# 作者: Warren WeckesserI=np.array([0, 1, 2, 3, 15, 16, 32, 64, 128])B=((I.reshape(-1,1) (2**np.arange( 8))) !=0).astype(int)print(B[:-1])# Author: Daniel T. McDonaldI=np.array([0, 1, 2, 3, 15, 16, 32, 64, 128], dtype=np.uint8)print(np.unpackbits(I[: np.newaxis], axis=1))
87.给定一个二维数组,如何提取唯一行?
# Author: Jaime Fernandez del RioZ=np.random.randint(0,2,(6,3))T=np.ascontigouslyarray(Z).view(np.dtype((np.void, Z.dtype .itemsize * Z) .shape[1])))_, idx=np.unique(T, return_index=True)uZ=Z[idx]print(uZ)
88. 考虑两个向量A 和B。使用einsum 求和、*、内部和外部。
# 作者: Alex Riley# 必读: http://ajcr.net/Basic-guide-to-einsum/np.einsum('i-', A) # np.sum(A)np.einsum('i,i-i' , A , B ) # A * Bnp.einsum('i,i', A, B) # np.inner(A, B) np.einsum('i,j', A, B) # np.outer( A , B)
89. 如何使用等距样本对两个向量(X, Y) 描述的路径进行采样?
# Author: Bas Swinckelsphi=np.arange(0, 10*np.pi, 0.1)a=1x=a*phi*np.cos(phi)y=a*phi*np.sin(phi)dr=(np. diff(x)**2 + np.diff(y)**2)**.5 # 段长度r=np.zeros_like(x)r[1:]=np.cumsum(dr) # 积分pathr_int=np. linspace (0, r.max(), 200) # 均匀分布pathx_int=np.interp(r_int, r, x) # 积分pathy_int=np.interp(r_int, r, y)
90.给定一个整数n和一个二维数组X,选择
# 作者: Evgeni BurovskiX=np.asarray([[1.0, 0.0, 3.0, 8.0],[2.0, 0.0, 1.0, 1.0],[1.5, 2.5, 1.0, 0.0]])n=4M=np.logic_and.reduce (np.mod(X, 1)==0, 轴=-1)M=(X.sum(轴=-1)==n)print(X[M])








