您现在的位置是:网站首页> 编程资料编程资料
python中numpy 常用操作总结_python_
2023-05-25
547人已围观
简介 python中numpy 常用操作总结_python_
前言:
NumPy 是 Python 语言的一个扩充程序库,支持大量高维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。同时NumPy 是机器学习必不可少的工具之一。
常用操作主要有:
- 创建数组
- 数组运算
- 数学函数
- 数组切片和索引
- 数组形状操作
- 数组排序
- 数组统计
环境
- Python 3.6
- NumPy: 1.14.2
1、导包
import numpy as np
2、通过列表创建数组 array()
np.array([1, 2, 3]) #一维数组 np.array([(1, 2, 3), (4, 5, 6)]) #二维数组
3、0/1数组 zeros()、ones()
np.zeros((3, 3)) #3行3列 np.ones((2, 3, 4))
4、等差数组 arange() reshape()
#一维等差 np.arange(5) #array([0, 1, 2, 3, 4]) # 二维等差 np.arange(6).reshape(2, 3) 结果: array([[0, 1, 2], [3, 4, 5]])
5、单位矩阵 eye()
np.eye(3) 结果: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
7、等间隔数组
#一维 np.linspace(1, 10, num=6) #array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])
8、随机数组
np.random.rand(2, 3) array([[0.40360777, 0.74141574, 0.32018331], [0.15261484, 0.18692149, 0.19351765]])
9、随机整数数组
np.random.randint(10, size=(2, 3)) #数值小于10 array([[2, 1, 0], [2, 7, 5]])
10、依据函数创建数组
np.fromfunction(lambda i, j: i + j, (3, 6)) array([[0., 1., 2., 3., 4., 5.], [1., 2., 3., 4., 5., 6.], [2., 3., 4., 5., 6., 7.]])
数组运算
+-*/ 加减乘除,对应位置元素
# 矩阵乘法 np.dot(A, B) # 如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算 np.mat(A) * np.mat(B)
转置:
A.T
矩阵求逆:
np.linalg.inv(A)
e^x
np.exp(a)
平方根:
np.sqrt(a)
三次方:
np.power(a, 3)
数组的切皮与索引
一维数组:
a = np.array([1, 2, 3, 4, 5]) # 一维数组索引 a[0], a[-1] # 一维数组切片 a[0:2], a[:-1]
二维数组;
a = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)]) # 索引 a[0], a[-1] ######## 切片 # 取第二列 a[:, 1] #取第 2,3 行 a[1:3, :]
数组形状
形状(行列数)
a.shape
更改行列数
a.reshape(2, 3) #指向新对象, reshape 并不改变原始数组 # resize 会改变原始数组 a.resize(2, 3)
展平数组
a.ravel()
垂直拼合数组,摞起来
np.vstack((a, b))
水平拼合数组,挨着摆
np.hstack((a, b))
分割数组:
array([[5, 0, 2], [4, 2, 4], [4, 7, 9]]) # 沿横轴分割数组 np.hsplit(a, 3) [array([[5], [4], [4]]), array([[0], [2], [7]]), array([[2], [4], [9]])] # 沿纵轴分割数组 np.vsplit(a, 3) [array([[5, 0, 2]]), array([[4, 2, 4]]), array([[4, 7, 9]])]
数组排序:
# 生成示例数组 a = np.array(([1, 4, 3], [6, 2, 9], [4, 7, 2])) # #### 返回每列最大值 np.max(a, axis=0) # #### 返回每行最小值 np.min(a, axis=1) # #### 返回每列最大值索引 np.argmax(a, axis=0) # #### 返回每行最小值索引 np.argmin(a, axis=1)
数组统计:
# 继续使用上面的 a 数组 np.median(a, axis=0) # #### 统计数组各行的算术平均值 np.mean(a, axis=1) # #### 统计数组各列的加权平均值 np.average(a, axis=0) # #### 统计数组各行的方差 np.var(a, axis=1) # #### 统计数组各列的标准偏差 np.std(a, axis=0)
进阶:
# #### 51. 创建一个 5x5 的二维数组,其中边界值为1,其余值为0 # In[60]: Z = np.ones((5,5)) Z[1:-1,1:-1] = 0 Z # #### 52. 使用数字 0 将一个全为 1 的 5x5 二维数组包围 # In[61]: Z = np.ones((5,5)) Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0) Z # #### 53. 创建一个 5x5 的二维数组,并设置值 1, 2, 3, 4 落在其对角线下方 # In[62]: Z = np.diag(1+np.arange(4),k=-1) Z # #### 54. 创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置 # In[63]: Z = np.zeros((10,10),dtype=int) Z[1::2,::2] = 1 Z[::2,1::2] = 1 Z # #### 55. 创建一个 0-10 的一维数组,并将 (1, 9] 之间的数全部反转成负数 # In[64]: Z = np.arange(11) Z[(1 < Z) & (Z <= 9)] *= -1 Z # #### 56. 找出两个一维数组中相同的元 # In[65]: Z1 = np.random.randint(0,10,10) Z2 = np.random.randint(0,10,10) print("Z1:", Z1) print("Z2:", Z2) np.intersect1d(Z1,Z2) # #### 57. 使用 NumPy 打印昨天、今天、明天的日期 # In[66]: yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') today = np.datetime64('today', 'D') tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') print("yesterday: ", yesterday) print("today: ", today) print("tomorrow: ", tomorrow) # #### 58. 使用五种不同的方法去提取一个随机数组的整数部分 # In[67]: Z = np.random.uniform(0,10,10) print("原始值: ", Z) print ("方法 1: ", Z - Z%1) print ("方法 2: ", np.floor(Z)) print ("方法 3: ", np.ceil(Z)-1) print ("方法 4: ", Z.astype(int)) print ("方法 5: ", np.trunc(Z)) # #### 59. 创建一个 5x5 的矩阵,其中每行的数值范围从 1 到 5 # In[68]: Z = np.zeros((5,5)) Z += np.arange(1,6) Z # #### 60. 创建一个长度为 5 的等间隔一维数组,其值域范围从 0 到 1,但是不包括 0 和 1 # In[69]: Z = np.linspace(0,1,6,endpoint=False)[1:] Z # #### 61. 创建一个长度为10的随机一维数组,并将其按升序排序 # In[70]: Z = np.random.random(10) Z.sort() Z # #### 62. 创建一个 3x3 的二维数组,并将列按升序排序 # In[71]: Z = np.array([[7,4,3],[3,1,2],[4,2,6]]) print("原始数组: \n", Z) Z.sort(axis=0) Z # #### 63. 创建一个长度为 5 的一维数组,并将其中最大值替换成 0 # In[72]: Z = np.random.random(5) print("原数组: ",Z) Z[Z.argmax()] = 0 Z # #### 64. 打印每个 NumPy 标量类型的最小值和最大值 # In[73]: for dtype in [np.int8, np.int32, np.int64]: print("The minimum value of {}: ".format(dtype), np.iinfo(dtype).min) print("The maximum value of {}: ".format(dtype),np.iinfo(dtype).max) for dtype in [np.float32, np.float64]: print("The minimum value of {}: ".format(dtype),np.finfo(dtype).min) print("The maximum value of {}: ".format(dtype),np.finfo(dtype).max) # #### 65. 将 `float32` 转换为整型 # In[74]: Z = np.arange(10, dtype=np.float32) print(Z) Z = Z.astype(np.int32, copy=False) Z # #### 66. 将随机二维数组按照第 3 列从上到下进行升序排列 # In[75]: Z = np.random.randint(0,10,(5,5)) print("排序前:\n",Z) Z[Z[:,2].argsort()] # #### 67. 从随机一维数组中找出距离给定数值(0.5)最近的数 # In[76]: Z = np.random.uniform(0,1,20) print("随机数组: \n", Z) z = 0.5 m = Z.flat[np.abs(Z - z).argmin()] m # #### 68. 将二维数组的前两行进行顺序交换 # In[77]: A = np.arange(25).reshape(5,5) print(A) A[[0,1]] = A[[1,0]] print(A) # #### 69. 找出随机一维数组中出现频率最高的值 # In[78]: Z = np.random.randint(0,10,50) print("随机一维数组:", Z) np.bincount(Z).argmax() # #### 70. 找出给定一维数组中非 0 元素的位置索引 # In[79]: Z = np.nonzero([1,0,2,0,1,0,4,0]) Z # #### 71. 对于给定的 5x5 二维数组,在其内部随机放置 p 个值为 1 的数 # In[80]: p = 3 Z = np.zeros((5,5)) np.put(Z, np.random.choice(range(5*5), p, replace=False),1) Z # #### 72. 对于随机的 3x3 二维数组,减去数组每一行的平均值 # In[81]: X = np.random.rand(3, 3) print(X) Y = X - X.mean(axis=1, keepdims=True) Y # #### 73. 获得二维数组点积结果的对角线数组 # In[82]: A = np.random.uniform(0,1,(3,3)) B = np.random.uniform(0,1,(3,3)) print(np.dot(A, B)) # 较慢的方法 np.diag(np.dot(A, B)) # In[83]: # 较快的方法 np.sum(A * B.T, axis=1) # In[84]: # 更快的方法 np.einsum("ij, ji->i", A, B) # #### 74. 找到随机一维数组中前 p 个最大值 # In[85]: Z = np.random.randint(1,100,100) print(Z) p = 5 Z[np.argsort(Z)[-p:]] # #### 75. 计算随机一维数组中每个元素的 4 次方数值 # In[86]: x = np.random.randint(2,5,5) print(x) np.power(x,4) # #### 76. 对于二维随机数组中各元素,保留其 2 位小数 # In[87]: Z = np.random.random((5,5)) print(Z) np.set_printoptions(precision=2) Z # #### 77. 使用科学记数法输出 NumPy 数组 # In[88]: Z = np.random.random([5,5]) print(Z) Z/1e3 # #### 78. 使用 NumPy 找出百分位数(25%,50%,75%) # In[89]: a = np.arange(15) print(a) np.percentile(a, q=[25, 50, 75]) # #### 79. 找出数组中缺失值的总数及所在位 # In[90]: # 生成含缺失值的 2 维数组 Z = np.random.rand(10,10) Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan Z # In[91]: print("缺失值总数: \n", np.isnan(Z).sum()) print("缺失值索引: \n", np.where(np.isnan(Z))) # #### 80. 从随机数组中删除包含缺失值的行 # In[92]: # 沿用 79 题中的含缺失值的 2 维数组 Z[np.sum(np.isnan(Z), axis=1) == 0] # #### 81. 统计随机数组中的各元素的数量 # In[93]: Z = np.random.randint(0,100,25).reshape(5,5) print(Z) np.unique(Z, return_counts=True) # 返回值中,第 2 个数组对应第 1 个数组元素的数量 # #### 82. 将数组中各元素按指定分类转换为文本值 # In[94]: # 指定类别如下 # 1 → 汽车 # 2 → 公交车 # 3 → 火车 Z = np.random.randint(1,4,10) print(Z) label_map = {1: "汽车", 2: "公交车", 3: "火车"} [label_map[x] for x in Z] # #### 83. 将多个 1 维数组拼合为单个 Ndarray # In[95]: Z1 = np.arange(3) Z2 = np.arange(3,7) Z3 = np.arange(7,10) Z = np.array([Z1, Z2, Z3]) print(Z) np.concatenate(Z) # #### 84. 打印各元素在数组中升序排列的索引 # In[96]: a = np.random.randint(100, size=10) print('Array: ', a) a.argsort() # #### 85. 得到二维随机数组各行的最大值 # In[97]: Z = np.random.randint(1,100, [5,5]) print(Z) np.amax(Z, axis=1) # #### 86. 得到二维随机数组各行的最小值(区别上面的方法) # In[98]: Z = np.random.randint(1,100, [5,5]) print(Z) np.apply_along_axis(np.min, arr=Z, axis=1) # #### 87. 计算两个数组之间的欧氏距离 # In[99]: a = np.array([1, 2]) b = np.array([7, 8]) # 数学计算方法 print(np.sqrt(np.power((8-2), 2) + np.power((7-1), 2))) # NumPy 计算 np.linalg.norm(b-a) # #### 88. 打印复数的实部和虚部 # In[100]: a = np.array([1 + 2j, 3 + 4j, 5 + 6j]) print("实部:", a.real) print("虚部:", a.imag) # #### 89. 求解给出矩阵的逆矩阵并验证 # In[101]: 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 # #### 90. 使用 Z-Score 标准化算法对数据进行标准化处理 # Z-Score 标准化公式: # $$Z = \frac{X-\mathrm{mean}(X)}{\mathrm{sd}(X)}$$ # In[102]: # 根据公式定义函数 def z
相关内容
- Python prettytable模块应用详解_python_
- Django ORM 事务和查询优化的操作方法_python_
- python学习之whl文件解释与安装详解_python_
- Python fileinput模块应用详解_python_
- 一篇文章搞懂Python程序流程控制结构_python_
- Python反射机制案例超详细讲解_python_
- Python四大模块文件管理介绍_python_
- yolov5模型配置yaml文件详细讲解_python_
- pandas进阶教程之Dataframe的apply方法_python_
- Python pandas按行、按列遍历DataFrame的几种方式_python_
点击排行
本栏推荐
