numpy的操作

张开发
2026/4/3 17:36:39 15 分钟阅读
numpy的操作
numpy的array合并合并 NumPy 数组的方法NumPy 提供了多种合并数组的方式主要包括np.concatenate、np.vstack、np.hstack、np.stack等函数。以下是具体的使用方法和示例。使用np.concatenate合并数组np.concatenate是通用的合并函数可以沿指定轴合并多个数组。默认沿第一个轴axis0合并。import numpy as np a np.array([1, 2, 3]) b np.array([4, 5, 6]) # 沿 axis0 合并默认 result np.concatenate((a, b)) print(result) # 输出: [1 2 3 4 5 6] # 沿 axis1 合并需要数组是二维的 a_2d np.array([[1, 2], [3, 4]]) b_2d np.array([[5, 6], [7, 8]]) result np.concatenate((a_2d, b_2d), axis1) print(result) # 输出: # [[1 2 5 6] # [3 4 7 8]]使用np.vstack垂直合并数组np.vstack用于垂直合并数组沿 axis0相当于np.concatenate(..., axis0)的简化版。a np.array([1, 2, 3]) b np.array([4, 5, 6]) result np.vstack((a, b)) print(result) # 输出: # [[1 2 3] # [4 5 6]]使用np.hstack水平合并数组np.hstack用于水平合并数组沿 axis1相当于np.concatenate(..., axis1)的简化版。a np.array([1, 2, 3]) b np.array([4, 5, 6]) result np.hstack((a, b)) print(result) # 输出: [1 2 3 4 5 6]使用np.stack堆叠数组np.stack会创建一个新的轴来堆叠数组适用于需要增加维度的场景。a np.array([1, 2, 3]) b np.array([4, 5, 6]) # 沿新轴堆叠默认 axis0 result np.stack((a, b)) print(result) # 输出: # [[1 2 3] # [4 5 6]] # 沿 axis1 堆叠 result np.stack((a, b), axis1) print(result) # 输出: # [[1 4] # [2 5] # [3 6]]使用np.column_stack和np.row_stacknp.column_stack将一维数组作为列堆叠成二维数组np.row_stack将一维数组作为行堆叠。a np.array([1, 2, 3]) b np.array([4, 5, 6]) # 列堆叠 result np.column_stack((a, b)) print(result) # 输出: # [[1 4] # [2 5] # [3 6]] # 行堆叠等同于 vstack result np.row_stack((a, b)) print(result) # 输出: # [[1 2 3] # [4 5 6]]注意事项合并数组时需确保维度匹配。例如np.concatenate要求除合并轴外其他维度相同。np.stack会引入新轴而其他函数通常不会。对于高维数组可以指定axis参数控制合并方向。np.newaxis的作用np.newaxis是 NumPy 中用于扩展数组维度的工具本质是None的别名。它的作用是在指定位置插入一个长度为 1 的新轴从而改变数组的形状。[:, np.newaxis]的用法功能在列方向第二维度插入新轴将一维数组转换为二维的列向量。示例import numpy as np arr np.array([1, 2, 3]) col_vector arr[:, np.newaxis] print(col_vector.shape) # 输出 (3, 1) print(col_vector)输出结果[[1] [2] [3]][np.newaxis, :]的用法功能在行方向第一维度插入新轴将一维数组转换为二维的行向量。示例row_vector arr[np.newaxis, :] print(row_vector.shape) # 输出 (1, 3) print(row_vector)输出结果[[1 2 3]]应用场景广播机制调整数组形状以满足广播规则例如计算矩阵与向量的加法。维度对齐在神经网络中输入数据时常需将一维数据扩展为二维如(n,)→(n, 1)。注意事项操作后生成的是视图view而非副本修改新数组会影响原数组。高维数组也可用np.newaxis如arr[np.newaxis, :, np.newaxis]会插入两个新轴。numpy 数组分割方法NumPy 提供了多种数组分割函数用于将数组拆分为多个子数组。以下是常用的分割方法np.split将数组沿指定轴分割为多个子数组。可以指定分割点或均匀分割。import numpy as np arr np.arange(9) # 在索引3和5处分割 result np.split(arr, [3, 5])np.array_split与split类似但允许不均匀分割。当无法均分时不会报错。arr np.arange(7) # 分成3个数组 result np.array_split(arr, 3)np.hsplit水平分割数组相当于沿列分割axis1。arr np.arange(16).reshape(4,4) # 分成2个数组 result np.hsplit(arr, 2)np.vsplit垂直分割数组相当于沿行分割axis0。arr np.arange(16).reshape(4,4) # 分成2个数组 result np.vsplit(arr, 2)np.dsplit深度分割数组沿第三个维度分割axis2适用于3D数组。arr np.arange(24).reshape(2,4,3) # 分成3个数组 result np.dsplit(arr, 3)分割参数说明整数参数表示均匀分割的数量列表参数表示分割点的索引位置axis参数指定分割的轴向默认0应用场景数据预处理时将数据集分割为训练集和测试集图像处理时分割通道并行计算时分配数据块注意所有分割函数返回的都是原数组的视图修改子数组会影响原数组。如果需要独立副本应显式调用copy()方法。numpy的copy与deep copy在NumPy中copy和deep copy深度拷贝是两种不同的数组复制方式主要区别在于内存管理和对嵌套对象的处理。浅拷贝view与深拷贝copy浅拷贝如切片操作仅创建新数组对象但共享原始数组的数据缓冲区。修改浅拷贝会影响原始数组。深拷贝np.copy()或arr.copy()完全复制数组及其数据新旧数组独立。关键差异内存独立性copy生成的新数组拥有独立的内存空间修改不会影响原数组。直接赋值或视图view共享内存修改会同步反映到原数组。嵌套对象处理NumPy的copy默认是浅拷贝对于数组内的Python对象如列表仍会共享引用。标准库copy.deepcopy()会递归复制所有嵌套对象确保完全独立。使用方法示例基本拷贝操作import numpy as np arr np.array([1, 2, 3]) arr_copy arr.copy() # 深拷贝 arr_view arr[:] # 浅拷贝 arr_copy[0] 99 # 不影响原数组 arr_view[1] 88 # 原数组被修改嵌套对象场景import copy nested_arr np.array([1, [2, 3], 4]) shallow_copy nested_arr.copy() # 内嵌列表仍共享引用 deep_copy copy.deepcopy(nested_arr) # 完全独立复制 shallow_copy[1][0] 99 # 会影响原数组的嵌套列表 deep_copy[1][0] 88 # 完全不影响原数组性能考量深拷贝需要分配新内存并复制所有数据对于大型数组会有性能开销。浅拷贝更高效但需注意副作用。在不需要独立数据时优先使用视图view操作。

更多文章