numpy基础知识之二

本文详细介绍了numpy库在数组操作中的基本用法,包括索引、数值替换、数组功能及数学运算。通过实例展示了如何选取特定元素、替换整行或列的值,以及使用clip函数进行边界值替换。还探讨了numpy的copy()函数、指数运算、条件判断、统计函数如最大值、最小值、平均值和中位数的计算,为理解和应用numpy提供了实用指南。

本次继续记录学习numpy数组的一些基本操作
1.索引
查数组中指定下表
在这里插入图片描述
第二行,第四列
注意:这里取的是第二行第四列
取一整列
array[:,0] 行取:,从头拿到尾,后面写要取得列数

2.数组中数值替换
array[1,1]=3
将整行替换~|
array[1,:]=3 第二行全都替换为3
将原有数值3全都替换为-1
array[array==3]=-1
在这里插入图片描述
将数组小于0的值全都替换
在这里插入图片描述
原数组不变同时替换某些值(相当于复制+替换)
clip函数 clip(a,b)数组中小于a的值替换为a,大于b的值替换为b
在这里插入图片描述
把数组name3中小于20的数替换为20,原数组不变
在这里插入图片描述
把name3中大于50的值都替换为50,float("-inf")代表无穷小

3.numpy其他功能
3.1copy()函数
copy()不同于数组直接赋值
在这里插入图片描述
3.2 n次方
array**2 2次方 对array中的每一个元素值求平方
3.3对于数组中的所有元素进行条件判断,返回True或者False
在这里插入图片描述
3.4 最大值 np.max(arrayname)
最小值 np.min(arrayname)
平均值 np.mean(arrayname)
中位数np.median(arrayname)
和 np.sum(arrayname)

<think>我们正在讨论深度学习领域中NumPy基础知识。根据引用[1]和引用[2],NumPy在深度学习数据准备中扮演关键角色,它提供了强大的多维数组对象和高效的数值运算功能。引用[3]虽然重点在矩阵求逆,但也强调了NumPy在科学计算中的核心地位。 对于深度学习,NumPy基础知识主要包括: 1. 多维数组(ndarray)的创建和操作 2. 数组的索引和切片 3. 数组的数学运算(包括广播机制) 4. 线性代数运算(如矩阵乘法、求逆等) 5. 随机数生成 由于深度学习中的数据通常表示为多维数组(例如图像数据是3维:高度、宽度、通道数),因此掌握NumPy数组操作是必不可少的。 下面我将详细讲解这些基础知识,并附上代码示例。注意:代码示例中的注释是为了帮助理解,实际运行时请确保环境已安装了NumPy(通常通过`pip install numpy`安装)。 ### 1. 多维数组的创建 NumPy的核心是`ndarray`对象,即N维数组。我们可以使用`numpy.array()`函数从Python列表创建数组。 ```python import numpy as np # 创建一维数组 arr1d = np.array([1, 2, 3, 4]) print("一维数组:\n", arr1d) # 创建二维数组(矩阵) arr2d = np.array([[1, 2, 3], [4, 5, 6]]) print("二维数组:\n", arr2d) # 创建全0数组 zeros_arr = np.zeros((2, 3)) # 2行3列 print("全0数组:\n", zeros_arr) # 创建全1数组 ones_arr = np.ones((3, 2)) # 3行2列 print("全1数组:\n", ones_arr) # 创建单位矩阵 eye_arr = np.eye(3) # 3x3单位矩阵 print("单位矩阵:\n", eye_arr) # 创建等差数列数组 linspace_arr = np.linspace(0, 10, 5) # 0到10之间等间隔的5个数 print("等差数列数组:\n", linspace_arr) ``` ### 2. 数组的索引和切片 与Python列表类似,但NumPy数组支持多维索引和切片。 ```python # 二维数组索引和切片示例 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取第一行 row0 = arr[0] # 或 arr[0, :] print("第一行:", row0) # 获取第一列 col0 = arr[:, 0] print("第一列:", col0) # 获取子矩阵(前两行,后两列) sub_arr = arr[:2, 1:] print("子矩阵:\n", sub_arr) ``` ### 3. 数组的数学运算 NumPy支持逐元素的数学运算,并支持广播机制(允许不同形状的数组进行运算)。 ```python a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # 逐元素加法 c = a + b print("逐元素加法:\n", c) # 逐元素乘法 d = a * b print("逐元素乘法:\n", d) # 矩阵乘法(注意:不是逐元素乘) e = np.dot(a, b) # 或 a @ b (Python 3.5+) print("矩阵乘法:\n", e) # 广播示例:数组与标量 f = a * 3 print("数组乘以标量:\n", f) # 广播示例:不同形状数组 g = np.array([10, 20]) h = a + g # g被广播为[[10,20],[10,20]],然后与a逐元素相加 print("广播加法:\n", h) ``` ### 4. 线性代数运算 NumPy提供了丰富的线性代数函数,在`numpy.linalg`模块中。 ```python from numpy.linalg import inv # 矩阵求逆 matrix = np.array([[1, 2], [3, 4]]) matrix_inv = inv(matrix) print("矩阵的逆:\n", matrix_inv) # 验证逆矩阵:原矩阵乘逆矩阵应得到单位阵 identity_check = matrix @ matrix_inv print("验证逆矩阵(接近单位矩阵):\n", np.round(identity_check, 10)) # 四舍五入到小数后10位,消除浮点误差 ``` ### 5. 随机数生成 在深度学习中,随机数常用于初始化权重。NumPy提供了随机数生成功能。 ```python # 生成随机整数 random_int = np.random.randint(0, 10, size=(2,3)) # 0到10之间(不含10)的随机整数,形状2x3 print("随机整数矩阵:\n", random_int) # 生成标准正态分布随机数 normal_random = np.random.randn(3, 2) # 均值为0,方差为1的正态分布,3x2 print("标准正态分布随机数:\n", normal_random) # 设置随机种子(保证可重复性) np.random.seed(42) a = np.random.randn(2,2) np.random.seed(42) b = np.random.randn(2,2) print("设置相同种子,两个随机数组是否相等:", np.array_equal(a, b)) # 应该相等 ``` ### 实际应用场景 在深度学习中,NumPy常用于: - 加载和预处理数据(如图像归一化) - 实现自定义层或损失函数 - 进行数值计算(如前向传播和反向传播的梯度计算) - 数据增强(如随机旋转、裁剪图像) 例如,图像数据通常表示为形状为(高度, 宽度, 通道数)的三维数组。我们可以使用NumPy进行归一化: ```python # 假设image是一个形状为(128,128,3)的数组,像素值范围0-255 image = np.random.randint(0, 256, size=(128,128,3), dtype=np.uint8) # 归一化到0-1范围 normalized_image = image / 255.0 print("归一化后的图像数据(第一像素的第一个通道):", normalized_image[0,0,0]) ``` 以上涵盖了深度学习所需的NumPy基础知识。掌握这些内容后,你可以更高效地处理数据并实现深度学习算法[^1][^2]。 §§相关问题§§ 1. NumPy数组与Python列表的主要区别是什么? 2. 在深度学习中,NumPy通常用于哪些数据处理任务? 3. 如何使用NumPy实现简单的线性回归? </think>### NumPy在深度学习中的基础知识 NumPy(Numerical Python)是Python科学计算的核心库,在深度学习领域扮演着关键角色,主要用于**高效处理多维数组数据**。以下深度学习所需的NumPy核心知识点: #### 1. 多维数组(ndarray) 深度学习数据的基本表示形式,如图像(3D:高度×宽度×通道)、视频(4D:帧×高度×宽度×通道)等 ```python import numpy as np # 创建数组 images = np.random.rand(100, 28, 28, 3) # 100张28x28的RGB图像 weights = np.zeros((256, 512)) # 神经网络权重矩阵 # 查看维度 print(images.shape) # 输出: (100, 28, 28, 3) ``` #### 2. 核心操作 - **索引切片**:提取数据子集 ```python # 提取第1张图像的全部通道 img0 = images[0, :, :, :] # 提取所有图像的红色通道 red_channel = images[:, :, :, 0] ``` - **广播机制**:自动对齐不同形状数组的运算 ```python A = np.array([[1,2], [3,4]]) B = np.array([10,20]) print(A + B) # 输出: [[11,22],[13,24]] ``` #### 3. 数学运算 深度学习涉及的关键计算: ```python # 矩阵乘法(神经网络前向传播) X = np.random.rand(64, 256) # 输入数据(64样本×256特征) W = np.random.rand(256, 128) # 权重矩阵 output = X.dot(W) # 矩阵乘法 # 激活函数应用 def relu(x): return np.maximum(0, x) # ReLU激活函数 # 统计计算(数据预处理) data = np.random.normal(loc=0, scale=1, size=(1000, 10)) mean = np.mean(data, axis=0) # 按列求均值 std = np.std(data, axis=0) # 按列求标准差 normalized = (data - mean) / std ``` #### 4. 内存优化技巧 提升深度学习数据处理效率: ```python # 视图操作(零拷贝) arr = np.arange(10) # [0,1,2,...,9] view = arr[::2] # [0,2,4,6,8] (不复制数据) # 高效赋值 arr = np.zeros((1024,1024)) arr[:, 1::2] = 1 # 奇数列赋值为1 ``` #### 5. 深度学习应用场景 1. **数据预处理**:归一化、标准化、数据增强 2. **模型权重存储**:全连接层权重矩阵(2D)、卷积核(4D) 3. **自定义层实现**:手动实现激活函数、损失函数 4. **梯度计算**:通过`np.gradient`进行数值微分 ```python # 均方误差损失函数实现 def mse_loss(y_true, y_pred): return np.mean(np.square(y_true - y_pred)) ``` #### 6. 性能优势 - **矢量化运算**:比Python循环快100倍以上 - **内存连续存储**:优化CPU缓存利用率 - **底层C实现**:避免Python解释器开销 > NumPy的多维数组操作是PyTorch/TensorFlow等深度学习框架的底层基础。掌握NumPy不仅能提升数据操作效率,还能深入理解深度学习框架的工作原理[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值