41,打印一个数组中所有值
np.set_printoptions(threshold =float('inf')) Z = np.zeros((16,16)) print(Z) //
42,给定一个标量,在一个向量中找到值最近的元素值
# 42,在向量元素中找离指定元素最近的值: Z = np.arange(100) v = np.random.uniform(0,100) index = (np.abs(Z-v)).argmin() print(Z[index]) # 15
43,建立一个结构数组,来表示一个坐标和 RGB 编码
Z =np.zeros(10, [('position',[('x',float,1), ('y',float,1)]), ('color',[('r',float,1), ('g',float,1), ('b',float,1)])]) print(Z) # [((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))]
44,指定一个100*2的向量矩阵,代表点的坐标,计算矩阵中点到点之间的距离
Z = np.random.random((10,2)) X,Y = np.atleast_2d(Z[:,0],Z[:,1]) D = np.sqrt((X-X.T)**2+(Y-Y.T)**2) D # array([[0. , 0.98633439, 0.72167275, 0.90188932, 0.13230666, 0.74692975, 0.06223381, 0.60174661, 0.95391954, 0.92008742], [0.98633439, 0. , 0.77985879, 0.1631969 , 0.90583532, 0.30879931, 0.92419607, 0.39486349, 1.00587334, 1.0537349 ], [0.72167275, 0.77985879, 0. , 0.61879559, 0.7580086 , 0.48464973, 0.68199994, 0.65207576, 0.28058449, 0.2957362 ], [0.90188932, 0.1631969 , 0.61879559, 0. , 0.83909907, 0.1681398 , 0.83995416, 0.35751067, 0.84286462, 0.89058005], [0.13230666, 0.90583532, 0.7580086 , 0.83909907, 0. , 0.69570875, 0.10653016, 0.51251781, 1.01061853, 0.98608667], [0.74692975, 0.30879931, 0.48464973, 0.1681398 , 0.69570875, 0. , 0.68572148, 0.27153623, 0.73491355, 0.77182869], [0.06223381, 0.92419607, 0.68199994, 0.83995416, 0.10653016, 0.68572148, 0. , 0.54051085, 0.9237499 , 0.89448777], [0.60174661, 0.39486349, 0.65207576, 0.35751067, 0.51251781, 0.27153623, 0.54051085, 0. , 0.9285785 , 0.94720901], [0.95391954, 1.00587334, 0.28058449, 0.84286462, 1.01061853, 0.73491355, 0.9237499 , 0.9285785 , 0. , 0.08212287], [0.92008742, 1.0537349 , 0.2957362 , 0.89058005, 0.98608667, 0.77182869, 0.89448777, 0.94720901, 0.08212287, 0. ]])
45,将 float32 转化为 int 32
Z = (np.random.rand(10)*100).astype(np.float32) Y = Z.view(np.int32) Y[:] = Z Y # [ 3 71 47 23 57 54 67 1 76 6]
**46,读取下面文本并转化为二维 array **
from io import StringIO s = StringIO('''1, 2, 3, 4, 5 6, , , 7, 8 , , 9,10,11''') Z =np.genfromtxt(s,delimiter = ",",dtype = np.int) print(Z) # [[ 1 2 3 4 5] [ 6 -1 -1 7 8] [-1 -1 9 10 11]]
47,Numpy 中数组枚举的表示方法
Z = np.arange(9).reshape(3,3) for index,value in np.ndenumerate(Z): print(index,value) for index in np.ndindex(Z.shape): print(index,Z[index])
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.0 G = np.exp(-((D-mu)**2/(2.0*sigma**2))) print(G) # [[0.36787944 0.44822088 0.51979489 0.57375342 0.60279818 0.60279818 0.57375342 0.51979489 0.44822088 0.36787944] [0.44822088 0.54610814 0.63331324 0.69905581 0.73444367 0.73444367 0.69905581 0.63331324 0.54610814 0.44822088] [0.51979489 0.63331324 0.73444367 0.81068432 0.85172308 0.85172308 0.81068432 0.73444367 0.63331324 0.51979489] [0.57375342 0.69905581 0.81068432 0.89483932 0.9401382 0.9401382 0.89483932 0.81068432 0.69905581 0.57375342] [0.60279818 0.73444367 0.85172308 0.9401382 0.98773022 0.98773022 0.9401382 0.85172308 0.73444367 0.60279818] [0.60279818 0.73444367 0.85172308 0.9401382 0.98773022 0.98773022 0.9401382 0.85172308 0.73444367 0.60279818] [0.57375342 0.69905581 0.81068432 0.89483932 0.9401382 0.9401382 0.89483932 0.81068432 0.69905581 0.57375342] [0.51979489 0.63331324 0.73444367 0.81068432 0.85172308 0.85172308 0.81068432 0.73444367 0.63331324 0.51979489] [0.44822088 0.54610814 0.63331324 0.69905581 0.73444367 0.73444367 0.69905581 0.63331324 0.54610814 0.44822088] [0.36787944 0.44822088 0.51979489 0.57375342 0.60279818 0.60279818 0.57375342 0.51979489 0.44822088 0.36787944]]
49,在二维数组中随机放置 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) # [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
50,矩阵减去每一行的平均值
X = np.random.rand(5,10) Y = X - X.mean(axis =1,keepdims = True) #Y = X -X.mean(axis=1).reshape(-1,1) print(Y) # [[-0.2854325 0.20882031 0.35568196 0.18316993 -0.40776416 -0.30312722 0.07405133 0.35347259 -0.09991147 -0.07896078] [ 0.04400539 -0.12949299 0.43078155 0.10710735 0.35645354 -0.43201896 0.1102518 -0.11709654 0.01395583 -0.38394697] [-0.07116609 -0.09382485 0.02956884 -0.29241189 -0.05337575 -0.24354029 0.28228751 0.28369777 -0.22918485 0.3879496 ] [ 0.34436033 0.29003034 -0.21067108 -0.09945774 0.0428871 -0.17125693 -0.28001421 0.40165161 -0.03741505 -0.28011437] [ 0.32963488 -0.03061654 -0.36657671 -0.05771164 -0.35016734 0.27941279 0.19521001 0.44803322 -0.31404906 -0.13316961]]
51,以某一列对整个数组的行进行排序
Z = np.random.randint(0,10,(3,3)) print(Z[Z[:,1].argsort()]) # [[3 4 8] [1 5 2] [2 8 2]]
52,判断一个2D数组,是否含有空列
Z = np.random.randint(0,3,(3,10)) print((~Z.any(axis = 0)).any()) # True
53,在数组中找到给定值的最近值
Z = np.random.uniform(0,1,10) z = 0.5 m = Z.flat[np.abs(Z-z).argmin()] print(m) # 0.507763391604458
54,给定两个二维数组维度分别为 1*3,3*1;利用迭代器计算他们的和
A = np.arange(3).reshape(3,1) B = np.arange(3).reshape(1,3) it = np.nditer([A,B,None]) for x,y,z in it:z[...] = x+y print(it.operands[2]) # [[0 1 2] [1 2 3] [2 3 4]]
55,基于索引列表 I ,对应权重 X,进行加权计算得到F
需要注意一下,这里用到 np.bincount() 函数,只有一个参数时,返回一个数组表示每个元素出现的次数;如果设置两个参数则会涉及到加权运算,理解方面比较困难,建议查阅一下官方文档
X = [1,2,3,4,5,6] I = [1,3,9,3,4,1] F = np.bincount(I,X) print(F) # [0. 7. 0. 6. 5. 0. 0. 0. 0. 3.]
56,给定一个 图片像素数组(w,h,3),计算其中唯一颜色数量
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] # color RGB 进行编码 n = len(np.unique(F)) print(n) # 4
57,给定一个四维数组,同时计算最后轴元素之和
A = np.random.randint(0,10,(3,4,3,4)) sum = A.sum(axis = (-2,-1))# 计算最后两列; print(sum) # second solutions sum = A.reshape(A.shape[:-2]+(-1,)).sum(axis = -1) # [[62 59 48 61] [53 59 45 48] [50 56 71 60]]
58,给定一维数组D,通过相同维度向量 S ,通过自己索引来计算子集D 的平均值
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) # [0.50247673 0.43057174 0.54440853 0.60862306 0.61939138 0.6184843 0.57271125 0.49704534 0.52671729 0.4849897 ]
59,计算一个点积的对角线
A = np.random.uniform(0,1,(5,5)) B = np.random.uniform(0,1,(5,5)) np.diag(np.dot(A,B)) # Second solutions np.sum(A*B.T,axis = 1) # array([0.49721784, 1.06865483, 0.65669748, 0.78147516, 1.11704931])
60,给定一维向量例如[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) # [1. 0. 0. 0. 2. 0. 0. 0. 3. 0. 0. 0. 4. 0. 0. 0. 5.]
好了,以上就是本篇文章的内容啦