51. 创建一个 5x5 的二维数组,其中边界值为1,其余值为0
1 '''考察numpy中二维数组的切片和利用np.ones()函数生成数组''' 2 import numpy as np 3 Z = np.ones((5,5)) 4 Z[1:4,1:4] = 0#Z[1:-1,1:-1] =0也可以 5 Z
array([[1., 1., 1., 1., 1.], [1., 0., 0., 0., 1.], [1., 0., 0., 0., 1.], [1., 0., 0., 0., 1.], [1., 1., 1., 1., 1.]])
52. 使用数字 0 将一个全为 1 的 5x5 二维数组包围
1 '''考察np.pad()填充阵列''' 2 import numpy as np 3 Z = np.ones((5,5)) 4 Z = np.pad(Z,pad_width=1,mode='constant',constant_values=0) 5 Z
array([[0., 0., 0., 0., 0., 0., 0.], [0., 1., 1., 1., 1., 1., 0.], [0., 1., 1., 1., 1., 1., 0.], [0., 1., 1., 1., 1., 1., 0.], [0., 1., 1., 1., 1., 1., 0.], [0., 1., 1., 1., 1., 1., 0.], [0., 0., 0., 0., 0., 0., 0.]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.pad.html?highlight=pad#numpy.pad
53. 创建一个 5x5 的二维数组,并设置值 1, 2, 3, 4 落在其对角线下方
1 '''考察np.diag()函数,构造对角线矩阵 2 np.diag(v,k)''' 3 import numpy as np 4 Z = np.diag(1+np.arange(4),k=-1)#1+np.arange(4)生成矩阵[1,2,3,4]一维数组 5 Z
array([[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 2, 0, 0, 0], [0, 0, 3, 0, 0], [0, 0, 0, 4, 0]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.diag.html?highlight=diag#numpy.diag
54. 创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置
1 '''考察切片''' 2 import numpy as np 3 Z = np.zeros((10,10),dtype=int) 4 Z[1::2,::2] = 1#先处理行,从第1行开始,跳过第0行 5 Z[::2,1::2] = 1#再处理列,从第0列开始 6 Z
array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
55. 创建一个 0-10 的一维数组,并将 (1, 9] 之间的数全部反转成负数
1 '''数组的索引及反转负数的写法''' 2 import numpy as np 3 Z = np.arange(11) 4 Z[(1 < Z) & (Z <= 9)] *= -1 5 Z
array([ 0, 1, -2, -3, -4, -5, -6, -7, -8, -9, 10])
56. 找出两个一维数组中相同的元素
'''考察np.intersect1d()找到两个数组的交集''' impot numpy as np Z1 = np.random.randint(0,10,10) Z2 = np.random.randint(0,10,10) print("Z1:", Z1) print("Z2:", Z2) np.intersect1d(Z1,Z2)
Z1: [5 2 7 6 7 8 1 5 2 4] Z2: [4 9 4 2 2 9 2 5 1 4] array([1, 2, 4, 5])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.intersect1d.html?highlight=intersect1d#numpy.intersect1d
57. 使用 NumPy 打印昨天、今天、明天的日期
1 '''Datetimes and Timedeltas''' 2 import numpy as np 3 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') 4 today = np.datetime64('today', 'D') 5 tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 6 print("yesterday: ", yesterday) 7 print("today: ", today) 8 print("tomorrow: ", tomorrow)
1 '''Datetimes and Timedeltas''' 2 import numpy as np 3 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') 4 today = np.datetime64('today', 'D') 5 tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 6 print("yesterday: ", yesterday) 7 print("today: ", today) 8 print("tomorrow: ", tomorrow)
1 '''Datetimes and Timedeltas''' 2 import numpy as np 3 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') 4 today = np.datetime64('today', 'D') 5 tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 6 print("yesterday: ", yesterday) 7 print("today: ", today) 8 print("tomorrow: ", tomorrow)
1 '''Datetimes and Timedeltas''' 2 import numpy as np 3 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') 4 today = np.datetime64('today', 'D') 5 tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 6 print("yesterday: ", yesterday) 7 print("today: ", today) 8 print("tomorrow: ", tomorrow)
yesterday: 2019-10-10 today: 2019-10-11 tomorrow: 2019-10-12
具体用法:https://numpy.org/devdocs/reference/arrays.datetime.html?highlight=timedelta64
58. 使用五种不同的方法去提取一个随机数组的整数部分
1 '''提取数组整数部分的方法''' 2 import numpy as np 3 Z = np.random.uniform(0,10,10) 4 print("原始值: ", Z) 5 6 print ("方法 1: ", Z - Z%1) 7 print ("方法 2: ", np.floor(Z)) 8 #https://numpy.org/devdocs/reference/generated/numpy.floor.html?highlight=floor#numpy.floor 9 print ("方法 3: ", np.ceil(Z)-1)#-1是因为这种方法往前取整 10 #https://numpy.org/devdocs/reference/generated/numpy.ceil.html?highlight=ceil#numpy.ceil 11 print ("方法 4: ", Z.astype(int)) 12 print ("方法 5: ", np.trunc(Z)) 13 #https://numpy.org/devdocs/reference/generated/numpy.trunc.html#numpy.trunc
59. 创建一个 5x5 的矩阵,其中每行的数值范围从 1 到 5
1 import numpy as np 2 Z = np.zeros((5,5)) 3 Z += np.arange(1,6)
60. 创建一个长度为 5 的等间隔一维数组,其值域范围从 0 到 1,但是不包括 0 和 1
1 '''np.linspace返回指定间隔的等间隔数字''' 2 import numpy as np 3 Z = np.linspace(0,1,6,endpoint=False)[1:]#0<=N<=1,num=6,endpoint=False:不#包含最后一个值,所以num=5;[1:]切片,数组不包含0 4 Z
具体用法:https://numpy.org/devdocs/reference/generated/numpy.linspace.html?highlight=linspace#numpy.linspace
61. 创建一个长度为10的随机一维数组,并将其按升序排序
1 '''sort()函数''' 2 import numpy as np 3 Z = np.random.random(10) 4 Z.sort() 5 Z
array([0.02100538, 0.02491363, 0.06035407, 0.33422597, 0.47044631,
0.57816531, 0.74059169, 0.74421693, 0.85133402, 0.90469746])
62. 创建一个 3x3 的二维数组,并将列按升序排序
1 '''sort(axis=1)从1轴看去,升序排列''' 2 import numpy as np 3 Z = np.array([[7,4,3],[3,1,2],[4,2,6]]) 4 print("原始数组: \n", Z) 5 6 Z.sort(axis=1) 7 Z
原始数组: [[7 4 3] [3 1 2] [4 2 6]] array([[3, 4, 7], [1, 2, 3], [2, 4, 6]])
63. 创建一个长度为 5 的一维数组,并将其中最大值替换成 0
1 '''argmax()选取轴向方向最大值的索引''' 2 import numpy as np 3 Z = np.random.random(5) 4 print("原数组: ",Z) 5 Z[Z.argmax()] = 0#Z.argmax()=3,也可以写成Z[np.argmax(Z)]=0 6 Z
原数组: [0.9726376 0.7217488 0.95154265 0.13562066 0.4923662 ]
array([0. , 0.7217488 , 0.95154265, 0.13562066, 0.4923662 ])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.argmax.html?highlight=argmax#numpy.argmax
64. 打印每个 NumPy 标量类型的最小值和最大值
1 import numpy as np 2 for dtype in [np.int8, np.int32, np.int64]: 3 print("The minimum value of {}: ".format(dtype), np.iinfo(dtype).min) 4 print("The maximum value of {}: ".format(dtype),np.iinfo(dtype).max) 5 for dtype in [np.float32, np.float64]: 6 print("The minimum value of {}: ".format(dtype),np.finfo(dtype).min) 7 print("The maximum value of {}: ".format(dtype),np.finfo(dtype).max)
The minimum value of <class 'numpy.int8'>: -128 The maximum value of <class 'numpy.int8'>: 127 The minimum value of <class 'numpy.int32'>: -2147483648 The maximum value of <class 'numpy.int32'>: 2147483647 The minimum value of <class 'numpy.int64'>: -9223372036854775808 The maximum value of <class 'numpy.int64'>: 9223372036854775807 The minimum value of <class 'numpy.float32'>: -3.4028235e+38 The maximum value of <class 'numpy.float32'>: 3.4028235e+38 The minimum value of <class 'numpy.float64'>: -1.7976931348623157e+308 The maximum value of <class 'numpy.float64'>: 1.7976931348623157e+308
65. 将 float32
转换为整型
1 '''np.astype()转换类型''' 2 import numpy as np 3 Z = np.arange(10, dtype=np.float32) 4 print(Z) 5 6 Z = Z.astype(np.int32, copy=False)#copy=False,返回输入数组 7 Z
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)
具体用法:https://numpy.org/devdocs/reference/generated/numpy.ndarray.astype.html?highlight=astype#numpy.ndarray.astype
66. 将随机二维数组按照第 3 列从上到下进行升序排列
1 '''argsort()返回对数组排序的索引''' 2 import numpy as np 3 Z = np.random.randint(0,10,(5,5)) 4 print("排序前:\n",Z) 5 6 Z[Z[:,2].argsort()#Z[np.argsort(Z[:,2])]
排序前: [[3 4 7 8 5] [7 4 7 3 6] [8 6 7 7 4] [4 8 6 8 5] [6 6 8 3 2]] array([[4, 8, 6, 8, 5], [3, 4, 7, 8, 5], [7, 4, 7, 3, 6], [8, 6, 7, 7, 4], [6, 6, 8, 3, 2]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.argsort.html?highlight=argsort#numpy.argsort
67. 从随机一维数组中找出距离给定数值(0.5)最近的数(存疑)
1 Z = np.random.uniform(0,1,20) 2 print("随机数组: \n", Z) 3 z = 0.5 4 m = Z.flat[np.abs(Z - z).argmin()] 5 6 m
随机数组: [0.93777567 0.51025044 0.59376374 0.22486936 0.93775471 0.8520337 0.98103144 0.85204206 0.22725586 0.09068851 0.4203348 0.40437622 0.4751998 0.1052024 0.30252427 0.77373344 0.22698046 0.80395887 0.33396734 0.6803853 ] 0.5102504389227239
具体用法:https://numpy.org/devdocs/reference/generated/numpy.ndarray.flat.html?highlight=flat#numpy.ndarray.flat
https://numpy.org/devdocs/reference/generated/numpy.argmin.html?highlight=argmin#numpy.argmin
68. 将二维数组的前两行进行顺序交换
1 A = np.arange(25).reshape(5,5) 2 print(A) 3 A[[0,1]] = A[[1,0]]#第0,1行互换,注意是方括号,(0,1)的话就是元素的替换 4 print(A)
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]] [[ 5 6 7 8 9] [ 0 1 2 3 4] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]]
69. 找出随机一维数组中出现频率最高的值
'''bincount()计算非负整数数组中每个值的次数''' Z = np.random.randint(0,10,50) print("随机一维数组:", Z) np.bincount(Z).argmax()
随机一维数组: [2 7 1 5 4 2 5 1 3 1 3 2 5 1 7 1 4 3 2 2 3 1 1 3 4 2 5 0 3 8 8 8 8 1 0 2 1 0 5 7 0 7 5 5 3 3 9 4 5 5] 1
具体用法:https://numpy.org/devdocs/reference/generated/numpy.bincount.html?highlight=bincount#numpy.bincount
70. 找出给定一维数组中非 0 元素的位置索引
1 '''nonzero()''' 2 Z = np.nonzero([1,0,2,0,1,0,4,0]) 3 Z
(array([0, 2, 4, 6]),)
具体用法:https://numpy.org/devdocs/reference/generated/numpy.ndarray.nonzero.html?highlight=nonzero#numpy.ndarray.nonzero
71. 对于给定的 5x5 二维数组,在其内部随机放置 p 个值为 1 的数
1 '''np.put()用给定值替换数组的指定元素''' 2 '''np.random.choice()从给定一维数组生成随机样本''' 3 import numpy as np 4 p = 3 5 Z = np.zeros((5,5)) 6 np.put(Z, np.random.choice(range(5*5), p, replace=False),1) 7 #np.random.choice(range(5*5),p,replace=False)作用是在一维数组[0,1,2,...,23,24]中#随机生成p(3)个随机样本组成的一维数组 8 #np.put(Z,[3,5,7],1)表示随机用3个1替代Z矩阵中的三个元素 9 Z
array([[0., 0., 0., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.], [0., 0., 0., 0., 0.], [1., 0., 0., 0., 0.]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.put.html#numpy.put
https://numpy.org/devdocs/reference/random/generated/numpy.random.Generator.choice.html? highlight=numpy%20random%20choice#numpy.random.Generator.choice
72. 对于随机的 3x3 二维数组,减去数组每一行的平均值
1 '''mean()求取平均值(按行axis=1)''' 2 import numpy as np 3 X = np.random.rand(3, 3) 4 print(X) 5 Y = X - X.mean(axis=1, keepdims=True) 6 Y
[[0.84664365 0.34947984 0.33087819] [0.58354834 0.24696935 0.60656972] [0.75552364 0.97000908 0.47839667]] array([[ 0.33764309, -0.15952072, -0.17812237], [ 0.1045192 , -0.23205979, 0.12754059], [ 0.02088051, 0.23536595, -0.25624646]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.mean.html?highlight=mean#numpy.mean
73. 获得二维数组点积结果的对角线数组(存疑)
1 ”’对角线矩阵的求法''' 2 import numpy as np 3 A = np.random.uniform(0,1,(3,3)) 4 B = np.random.uniform(0,1,(3,3)) 5 print(np.dot(A, B)) 6 # 较慢的方法 7 np.diag(np.dot(A, B)) 8 #https://numpy.org/devdocs/reference/generated/numpy.diag.html?#highlight=diag#numpy.diag
[[0.61078817 0.42378285 0.80538938] [0.24534479 0.51986857 0.73129344] [0.45208917 0.77847453 0.89000805]] array([0.61078817, 0.51986857, 0.89000805])
# 较快的方法 np.sum(A * B.T, axis=1)
1 # 更快的方法 2 np.einsum("ij, ji->i", A, B)
具体用法:https://numpy.org/devdocs/reference/generated/numpy.einsum.html?highlight=einsum#numpy.einsum
74. 找到随机一维数组中前 p 个最大值
1 '''argsort()返回对数组进行排序的索引''' 2 import numpy as np 3 4 Z = np.random.randint(1,100,100) 5 print(Z) 6 7 p = 5 8 9 Z[np.argsort(Z)[-p:]]#np.argsort(Z)[-5:]对Z一维数组升序排列以后最后五个数
[73 27 56 25 95 89 29 17 29 80 6 24 63 54 93 65 56 63 85 85 62 58 50 24
53 14 85 82 57 63 78 19 31 85 15 97 8 79 36 21 12 55 52 33 62 53 38 59
61 71 65 25 71 30 51 91 56 31 77 47 25 91 71 13 86 19 66 18 12 72 58 17
86 22 4 32 83 46 38 11 83 45 30 9 46 86 84 48 47 20 26 27 10 98 59 2
81 68 22 74]
array([91, 93, 95, 97, 98])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.argsort.html?highlight=argsort#numpy.argsort
75. 计算随机一维数组中每个元素的 4 次方数值
1 '''np.power()幂函数''' 2 import numpy as np 3 x = np.random.randint(2,5,5) 4 print(x) 5 6 np.power(x,4)
[3 3 4 3 4]
array([ 81, 81, 256, 81, 256])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.power.html?highlight=power#numpy.power
76. 对于二维随机数组中各元素,保留其 2 位小数
'''np.set_printoptions()确定浮点数,数组和其他NumPy对象的显示方式''' import numpy as np Z = np.random.random((5,5)) print(Z) np.set_printoptions(precision=2) Z
[[7.33e-01 4.29e-01 7.42e-01 5.49e-01 6.55e-01] [7.28e-01 6.06e-01 4.49e-01 6.74e-01 5.44e-01] [9.92e-01 6.40e-01 8.97e-01 1.39e-01 9.26e-01] [1.84e-01 7.20e-01 6.65e-01 8.43e-01 6.27e-01] [7.65e-01 3.06e-01 8.20e-01 3.71e-04 5.66e-01]] array([[7.33e-01, 4.29e-01, 7.42e-01, 5.49e-01, 6.55e-01], [7.28e-01, 6.06e-01, 4.49e-01, 6.74e-01, 5.44e-01], [9.92e-01, 6.40e-01, 8.97e-01, 1.39e-01, 9.26e-01], [1.84e-01, 7.20e-01, 6.65e-01, 8.43e-01, 6.27e-01], [7.65e-01, 3.06e-01, 8.20e-01, 3.71e-04, 5.66e-01]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.set_printoptions.html?highlight=set_printoptions#numpy.set_printoptions
77. 使用科学记数法输出 NumPy 数组
Z = np.random.random([5,5]) print(Z) Z/1e3
[[0.14 0.28 0.87 0.81 0.88] [0.88 0.31 0.03 0.71 0.18] [0.9 0.4 0.66 0.98 0.96] [0.99 0.24 0.23 0.33 0.11] [0.11 0.57 0.36 0.36 0.45]] array([[1.37e-04, 2.77e-04, 8.75e-04, 8.07e-04, 8.75e-04], [8.77e-04, 3.12e-04, 3.20e-05, 7.07e-04, 1.83e-04], [8.95e-04, 3.97e-04, 6.60e-04, 9.82e-04, 9.64e-04], [9.92e-04, 2.38e-04, 2.34e-04, 3.28e-04, 1.05e-04], [1.10e-04, 5.70e-04, 3.56e-04, 3.55e-04, 4.47e-04]])
78. 使用 NumPy 找出百分位数(25%,50%,75%)
1 '''np.percentile()计算沿指定轴的数据的第q个百分位数。返回数组元素的第q个百分点''' 2 import numpy as np 3 a = np.arange(15) 4 print(a) 5 6 np.percentile(a, q=[25, 50, 75])
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
array([ 3.5, 7. , 10.5])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.percentile.html?highlight=percentile#numpy.percentile
79. 找出数组中缺失值的总数及所在位置
1 '''isnan()找到缺失值的位置及总数''' 2 # 生成含缺失值的 2 维数组 3 Z = np.random.rand(10,10) 4 Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan 5 #np.random.randint(10, size=5), np.random.randint(10, size=5)表示nan的位置 6 Z 7 print("缺失值总数: \n", np.isnan(Z).sum()) 8 print("缺失值索引: \n", np.where(np.isnan(Z)))
array([[0.84, 0.52, 0.14, 0.95, 0.26, nan, 0.02, 0.69, 0.57, 0.09], [0.84, 0.81, 0.27, 0.93, 0.09, 0.52, 0.61, 0.23, 0.66, 0.45], [ nan, nan, 0.13, 0.46, 0.33, 0.62, 0.25, 0.69, 0.07, 0.23], [0.83, 0.96, 0.87, 0.8 , 0.71, 0.5 , 0.7 , 0.33, 0.52, 0.59], [0.35, 0.78, 0.06, 0.26, 0.08, 0.51, nan, 0.28, 0.28, 0.26], [0.4 , 0.75, 0.58, 0.48, 0.91, 0.02, 0.01, 0.15, 0.26, 0.7 ], [0.73, 0.39, 0.58, 0.72, 0.07, 0.04, 0.93, 0.2 , 0.14, 0.17], [0.66, 0.2 , 0.16, 0.59, 0.28, 0.17, 0.05, 0.57, 0.89, 0.56], [0.64, 0.74, 0.86, 0.51, 0.77, 0.9 , 0.8 , 0.19, 0.42, 0.34], [0.97, 0.77, 0.51, 0.78, 0.11, 0.27, 0.66, 0.67, nan, 0.7 ]]) 缺失值总数: 5 缺失值索引: (array([0, 2, 2, 4, 9]), array([5, 0, 1, 6, 8]))
具体用法:https://numpy.org/devdocs/reference/generated/numpy.isnan.html?highlight=isnan#numpy.isnan
80. 从随机数组中删除包含缺失值的行(存疑)
1 # 生成含缺失值的 2 维数组 2 Z = np.random.rand(10,10) 3 Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan 4 Z 5 Z[np.sum(np.isnan(Z), axis=1) == 0]
array([[0.84, 0.81, 0.27, 0.93, 0.09, 0.52, 0.61, 0.23, 0.66, 0.45], [0.83, 0.96, 0.87, 0.8 , 0.71, 0.5 , 0.7 , 0.33, 0.52, 0.59], [0.4 , 0.75, 0.58, 0.48, 0.91, 0.02, 0.01, 0.15, 0.26, 0.7 ], [0.73, 0.39, 0.58, 0.72, 0.07, 0.04, 0.93, 0.2 , 0.14, 0.17], [0.66, 0.2 , 0.16, 0.59, 0.28, 0.17, 0.05, 0.57, 0.89, 0.56], [0.64, 0.74, 0.86, 0.51, 0.77, 0.9 , 0.8 , 0.19, 0.42, 0.34]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.sum.html#numpy.sum
81. 统计随机数组中的各元素的数量
1 Z = np.random.randint(0,100,25).reshape(5,5) 2 print(Z) 3 4 np.unique(Z, return_counts=True) # 返回值中,第 2 个数组对应第 1 个数组元素的数量
[[70 6 41 91 37] [85 23 66 52 20] [95 6 50 72 55] [23 56 3 29 98] [85 4 8 94 49]] (array([ 3, 4, 6, 8, 20, 23, 29, 37, 41, 49, 50, 52, 55, 56, 66, 70, 72, 85, 91, 94, 95, 98]), array([1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1]))
具体用法:https://numpy.org/devdocs/reference/generated/numpy.unique.html?highlight=unique#numpy.unique
82. 将数组中各元素按指定分类转换为文本值
1 # 指定类别如下 2 # 1 → 汽车 3 # 2 → 公交车 4 # 3 → 火车 5 6 7 Z = np.random.randint(1,4,10) 8 print(Z) 9 10 label_map = {1: "汽车", 2: "公交车", 3: "火车"} 11 12 [label_map[x] for x in Z]
[3 3 1 3 2 3 1 1 3 2] ['火车', '火车', '汽车', '火车', '公交车', '火车', '汽车', '汽车', '火车', '公交车']
83. 将多个 1 维数组拼合为单个 Ndarray
1 Z1 = np.arange(3) 2 Z2 = np.arange(3,7) 3 Z3 = np.arange(7,10) 4 5 Z = np.array([Z1, Z2, Z3]) 6 print(Z) 7 8 np.concatenate(Z)
[array([0, 1, 2]) array([3, 4, 5, 6]) array([7, 8, 9])]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.concatenate.html?highlight=concatenate#numpy.concatenate
84. 打印各元素在数组中升序排列的索引
1 a = np.random.randint(100, size=10) 2 print('Array: ', a) 3 4 a.argsort()
Array: [70 29 17 84 11 76 26 9 92 3]
array([9, 7, 4, 2, 6, 1, 0, 5, 3, 8])
85. 得到二维随机数组各行的最大值
1 Z = np.random.randint(1,100, size=[5,5]) 2 print(Z) 3 4 np.amax(Z, axis=1)
[[76 13 79 38 62] [76 85 91 24 56] [81 58 48 77 15] [78 80 87 45 21] [31 51 89 38 38]] array([79, 91, 81, 87, 89])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.amax.html?highlight=amax#numpy.amax
86. 得到二维随机数组各行的最小值(区别上面的方法)
1 Z = np.random.randint(1,100, [5,5]) 2 print(Z) 3 #np.amin(Z, axis=1) 4 np.apply_along_axis(np.min, arr=Z, axis=1)#区别于上一个方法
[[32 29 68 26 31] [74 33 31 99 61] [84 31 95 70 73] [94 8 68 12 30] [62 90 71 3 93]] array([26, 31, 31, 8, 3])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.apply_along_axis.html?highlight=apply_along_axis#numpy.apply_along_axis
87. 计算两个数组之间的欧氏距离
1 a = np.array([1, 2]) 2 b = np.array([7, 8]) 3 print(a,b) 4 # 数学计算方法 5 print(np.sqrt(np.power((8-2), 2) + np.power((7-1), 2))) 6 7 # NumPy 计算 8 np.linalg.norm(b-a)
[1 2] [7 8]
8.48528137423857
8.48528137423857
具体用法:https://numpy.org/devdocs/reference/generated/numpy.linalg.norm.html?highlight=linalg%20norm#numpy.linalg.norm
88. 打印复数的实部和虚部
a = np.array([1 + 2j, 3 + 4j, 5 + 6j]) print(a) print("实部:", a.real) print("虚部:", a.imag)
[1.+2.j 3.+4.j 5.+6.j] 实部: [1. 3. 5.] 虚部: [2. 4. 6.]
89. 求解给出矩阵的逆矩阵并验证
matrix = np.array([[1., 2.], [3., 4.]]) inverse_matrix = np.linalg.inv(matrix) # 验证原矩阵和逆矩阵的点积是否为单位矩阵 assert np.allclose(np.dot(matrix, inverse_matrix), np.eye(2)) inverse_matrix
array([[-2. , 1. ],
[ 1.5, -0.5]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.linalg.inv.html?highlight=linalg%20inv#numpy.linalg.inv
90. 使用 Z-Score 标准化算法对数据进行标准化处理
Z-Score 标准化公式:
Z=(X−mean(X))/sd(X)
1 import numpy as np 2 # 根据公式定义函数 3 def zscore(x, axis = None): 4 xmean = x.mean(axis=axis, keepdims=True) 5 xstd = np.std(x, axis=axis, keepdims=True) 6 zscore = (x-xmean)/xstd 7 return zscore 8 9 # 生成随机数据 10 Z = np.random.randint(10, size=(5,5)) 11 print(Z) 12 13 zscore(Z)
[[9 8 1 5 3] [8 4 3 0 1] [2 4 6 2 3] [6 7 6 2 4] [3 7 3 0 5]] array([[ 1.97058711, 1.57006127, -1.23361957, 0.36848377, -0.4325679 ], [ 1.57006127, -0.03204207, -0.4325679 , -1.63414541, -1.23361957], [-0.83309374, -0.03204207, 0.7690096 , -0.83309374, -0.4325679 ], [ 0.7690096 , 1.16953544, 0.7690096 , -0.83309374, -0.03204207], [-0.4325679 , 1.16953544, -0.4325679 , -1.63414541, 0.36848377]])
91. 使用 Min-Max 标准化算法对数据进行标准化处理
Min-Max 标准化公式:
1 # 根据公式定义函数 2 def min_max(x, axis=None): 3 min = x.min(axis=axis, keepdims=True) 4 max = x.max(axis=axis, keepdims=True) 5 result = (x-min)/(max-min) 6 return result 7 8 # 生成随机数据 9 Z = np.random.randint(10, size=(5,5)) 10 print(Z) 11 12 min_max(Z)
[[4 2 8 4 7] [3 2 7 3 4] [4 3 5 3 4] [9 4 1 7 9] [3 7 6 3 8]] array([[0.375, 0.125, 0.875, 0.375, 0.75 ], [0.25 , 0.125, 0.75 , 0.25 , 0.375], [0.375, 0.25 , 0.5 , 0.25 , 0.375], [1. , 0.375, 0. , 0.75 , 1. ], [0.25 , 0.75 , 0.625, 0.25 , 0.875]])
92. 使用 L2 范数对数据进行标准化处理(存疑)
L2 = √ X12 + X22 + X32 + ... + Xi2
1 '''np.linalg.norm()矩阵和向量范数''' 2 import numpy as np 3 # 根据公式定义函数 4 def L2_normalize(v, axis=-1, order=2): 5 L2 = np.linalg.norm(v, ord = order, axis=axis, keepdims=True) 6 L2[L2==0] = 1 7 return v/L2 8 9 # 生成随机数据 10 Z = np.random.randint(10, size=(5,5)) 11 print(Z) 12 13 L2_normalize(Z)
1 # 根据公式定义函数 2 def l2_normalize(v, axis=-1, order=2): 3 l2 = np.linalg.norm(v, ord = order, axis=axis, keepdims=True) 4 l2[l2==0] = 1 5 return v/l2 6 7 # 生成随机数据 8 Z = np.random.randint(10, size=(5,5)) 9 print(Z) 10 11 l2_normalize(Z)
[[7 5 7 4 1] [3 0 5 7 1] [8 9 3 4 4] [9 7 9 2 3] [0 9 1 4 6]] array([[0.59160798, 0.42257713, 0.59160798, 0.3380617 , 0.08451543], [0.32732684, 0. , 0.54554473, 0.76376262, 0.10910895], [0.58658846, 0.65991202, 0.21997067, 0.29329423, 0.29329423], [0.60133779, 0.46770717, 0.60133779, 0.13363062, 0.20044593], [0. , 0.77748158, 0.08638684, 0.34554737, 0.51832106]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.linalg.norm.html?highlight=linalg%20norm#numpy.linalg.norm
93. 使用 NumPy 计算变量直接的相关性系数
1 '''np.corrcoef()Return Pearson product-moment correlation coefficients''' 2 import numpy as np 3 4 Z = np.array([ 5 [1, 2, 1, 9, 10, 3, 2, 6, 7], # 特征 A 6 [2, 1, 8, 3, 7, 5, 10, 7, 2], # 特征 B 7 [2, 1, 1, 8, 9, 4, 3, 5, 7]]) # 特征 C 8 9 np.corrcoef(Z)
相关性系数取值从 [-1, 1]
变换,靠近 1 则代表正相关性较强,-1 则代表负相关性较强。结果如下所示,变量 A 与变量 A 直接的相关性系数为 1
,因为是同一个变量。变量 A 与变量 C 之间的相关性系数为 0.97
,说明相关性较强。
[A] [B] [C] array([[ 1. , -0.06, 0.97] [A] [-0.06, 1. , -0.01], [B] [ 0.97, -0.01, 1. ]]) [C]
具体用法:https://numpy.org/devdocs/reference/generated/numpy.corrcoef.html?highlight=corrcoef#numpy.corrcoef
94. 使用 NumPy 计算矩阵的特征值和特征向量
1 '''np.linalg.eig()计算矩阵的特征值和特征向量''' 2 import numpy as np 3 M = np.array([[1,2,3], [4,5,6], [7,8,9]])#np.matrix()尽量少使用 4 w, v = np.linalg.eig(M) 5 # w 对应特征值,v 对应特征向量 6 M, w, v
(array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), array([ 1.61168440e+01, -1.11684397e+00, -9.75918483e-16]), array([[-0.23197069, -0.78583024, 0.40824829], [-0.52532209, -0.08675134, -0.81649658], [-0.8186735 , 0.61232756, 0.40824829]]))
具体用法:https://numpy.org/devdocs/reference/generated/numpy.matrix.html?highlight=matrix#numpy.matrix
https://numpy.org/devdocs/reference/generated/numpy.linalg.eig.html?highlight=linalg%20eig#numpy.linalg.eig
95. 使用 NumPy 计算 Ndarray 两相邻元素差值
1 '''np.diff()''' 2 import numpy as np 3 4 Z = np.random.randint(1,10,10) 5 print(Z) 6 7 # 计算 Z 两相邻元素差值 8 print(np.diff(Z, n=1)) 9 10 # 重复计算 2 次 11 print(np.diff(Z, n=2)) 12 13 # 重复计算 3 次 14 print(np.diff(Z, n=3))
[ 8 3 2 2 6 4 6 6 5 1] [-5 -1 0 4 -2 2 0 -1 -4] [ 4 1 4 -6 4 -2 -1 -3] [-3 3 -10 10 -6 1 -2]
具体用法:https://numpy.org/devdocs/reference/generated/numpy.diff.html?highlight=diff#numpy.diff
96. 使用 NumPy 将 Ndarray 相邻元素依次累加
1 '''连加''' 2 import numpy as np 3 Z = np.random.randint(1,10,10) 4 print(Z) 5 6 """ 7 [第一个元素, 第一个元素 + 第二个元素, 第一个元素 + 第二个元素 + 第三个元素, ...] 8 """ 9 np.cumsum(Z)
[1 4 6 3 8 3 6 5 2 4]
array([ 1, 5, 11, 14, 22, 25, 31, 36, 38, 42])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.cumsum.html?highlight=cumsum#numpy.cumsum
97. 使用 NumPy 按列连接两个数组
1 '''np.c_按列连接两个数组''' 2 import numpy as np 3 M1 = np.array([[1, 2, 3],[7,8,9]]) 4 M2 = np.array([[4, 5, 6],[10,11,12]]) 5 print(M1) 6 print(M2) 7 np.c_[M1, M2]
[[1 2 3] [7 8 9]] [[ 4 5 6] [10 11 12]] array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.c_.html?highlight=c_#numpy.c_
98. 使用 NumPy 按行连接两个数组
1 '''np.r_[]按行连接数组''' 2 import numpy as np 3 M1 = np.array([[1, 2, 3],[7,8,9]]) 4 M2 = np.array([[4, 5, 6],[10,11,12]]) 5 print(M1) 6 print(M2) 7 np.r_[M1, M2]
[[1 2 3] [7 8 9]] [[ 4 5 6] [10 11 12]] array([[ 1, 2, 3], [ 7, 8, 9], [ 4, 5, 6], [10, 11, 12]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.r_.html?highlight=r_#numpy.r_
99. 使用 NumPy 打印九九乘法表
1 '''np.fromfunction()通过在每个坐标上执行一个函数来构造一个数组''' 2 import numpy as np 3 np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9)) 4 #i表示行,j表示列;(i+1)*(j+1)是构造的函数; 5 #(9,9)是二维数组,9行9列
array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.], [ 2., 4., 6., 8., 10., 12., 14., 16., 18.], [ 3., 6., 9., 12., 15., 18., 21., 24., 27.], [ 4., 8., 12., 16., 20., 24., 28., 32., 36.], [ 5., 10., 15., 20., 25., 30., 35., 40., 45.], [ 6., 12., 18., 24., 30., 36., 42., 48., 54.], [ 7., 14., 21., 28., 35., 42., 49., 56., 63.], [ 8., 16., 24., 32., 40., 48., 56., 64., 72.], [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
具体用法:https://numpy.org/devdocs/reference/generated/numpy.fromfunction.html?highlight=fromfunction#numpy.fromfunction
100. 使用 NumPy 将实验楼 LOGO 转换为 Ndarray 数组