- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境配置
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 数组的创建和操作
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 数组迭代
- NumPy - 数组重塑
- NumPy - 数组连接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和运算
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步长
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组运算
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制和视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索和计数函数
- NumPy - 数组搜索
- NumPy - 数组的并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 数组加载
- Numpy - 数组保存
- NumPy - 向数组追加值
- NumPy - 交换数组列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 缺失数据插补
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 平均值
- NumPy - 中位数
- NumPy - 最小值
- NumPy - 最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 数组重塑
重塑 NumPy 数组
重塑 NumPy 数组意味着改变其形状,即修改每个维度上的元素数量,同时保持元素总数不变。换句话说,新形状中维度的乘积必须等于原始形状中维度的乘积。
例如,形状为 (6,) 的数组可以重塑为 (2, 3) 或 (3, 2),但不能重塑为 (2, 2),因为 6 个元素无法放入 2x2 的数组中。
将一维数组重塑为二维数组
我们可以使用 NumPy 中的 reshape() 函数将一维数组重塑为二维数组。这用于将线性数据组织成矩阵形式。
reshape() 函数改变现有数组的形状而不改变其数据。以下是语法:
numpy.reshape(array, newshape)
其中:
array − 你想要重塑的数组。
newshape − 你想要赋予数组的形状。它可以是整数或整数元组。一个维度可以是 -1,这意味着它将根据数组的长度和其余维度推断出来。
示例:基本的重塑
在下面的示例中,我们使用 reshape() 函数将具有 6 个元素的一维数组“arr”重塑为二维数组:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6]) # Reshape to 2-D array reshaped_arr = arr.reshape((2, 3)) print("1-D to 2-D Array (2x3):") print(reshaped_arr)
获得的输出如下:
1-D to 2-D Array (2x3): [[1 2 3] [4 5 6]]
示例:重塑的实际用例
假设你有一组班级学生的考试成绩列表,并且想要将它们组织成一个表格,其中每一行代表一个学生,每一列代表不同的考试。你可以通过将一维成绩数组重塑为二维数组来实现这一点:
import numpy as np # Original 1-D array of test scores scores = np.array([85, 90, 78, 92, 88, 76]) # Reshape into a 2-D array where each row is a student's scores scores_matrix = scores.reshape((2, 3)) print("Scores Matrix (2 students, 3 tests each):") print(scores_matrix)
这将产生以下结果:
Scores Matrix (2 students, 3 tests each): [[85 90 78] [92 88 76]]
将一维数组重塑为三维数组
我们也可以使用 reshape() 函数将一维数组重塑为 NumPy 中的三维数组。这有助于你表示更复杂的结构数据,例如多通道图像(例如 RGB 图像)、不同通道的时间序列数据或体数据。
示例
在这个示例中,我们使用 reshape() 函数将具有 12 个元素的一维数组“arr”重塑为三维数组:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) # Reshape to 3-D array reshaped_arr = arr.reshape((2, 2, 3)) print("1-D to 3-D Array (2x2x3):") print(reshaped_arr)
上述代码的输出如下:
1-D to 3-D Array (2x2x3): [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]]
将 N 维数组重塑为一维数组
在 NumPy 中将 N 维 (N-D) 数组重塑为一维 (1-D) 数组是将多维数组展平或折叠成单个线性数组的过程。我们也可以使用 reshape() 函数来实现这一点。
将复杂的多分量数组展平为一维格式简化了某些数据处理任务,并使数据更容易处理和分析。
示例
在下面的示例中,我们使用带有 -1 参数的 reshape() 函数将形状为 (2, 3) 的二维数组“arr”重塑为一维数组:
import numpy as np # Original 2-D array arr = np.array([[1, 2, 3], [4, 5, 6]]) # Reshape to 1-D array reshaped_arr = arr.reshape(-1) print("Reshaped Array:", reshaped_arr)
获得的输出如下:
Reshaped Array:[1 2 3 4 5 6]
重塑维度未知的数组
你可以使用 NumPy 中的 reshape() 函数重塑维度未知的数组。通过将-1作为参数传递给 reshape() 函数,NumPy 会根据数组中的元素总数和其他指定的维度自动计算该维度的尺寸。
这有助于你重塑数组,而无需显式计算每个维度的确切大小。
示例
在下面的示例中,我们使用 reshape() 函数将具有 12 个元素的一维数组 arr 重塑为三维数组,并将其中一个维度指定为“-1”:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) # Reshape to 3-D array with one unknown dimension reshaped_arr = arr.reshape((2, 2, -1)) print("Reshaped Array with Unknown Dimension:") print(reshaped_arr)
执行上述代码后,我们将获得以下输出:
Reshaped Array with Unknown Dimension: [[[ 1 2 3] [ 4 5 6]][[ 7 8 9] [10 11 12]]]
重塑数组时出现错误
在 NumPy 中重塑数组有时会导致错误,尤其是在元素总数与指定维度的乘积不匹配时。务必确保新形状与数组中的元素数量兼容。
重塑数组时的常见错误
以下是 NumPy 中重塑数组时最常见的错误:
ValueError: 新数组的总大小必须保持不变 − 当原始数组中的元素数量与为重塑指定的维度的乘积不匹配时,将发生此错误。
例如,尝试将 10 个元素的一维数组重塑为 3x3 矩阵 (reshape((3, 3))) 将引发此错误,因为 3 × 3 = 9 与 10 不同。
ValueError: 无法将大小为 X 的数组重塑为形状 (Y, Z) − 此错误表明原始数组大小 (X) 与指定的形状 (Y, Z) 不兼容。
例如,尝试将大小为 10 的一维数组重塑为 2x5 矩阵 (reshape((2, 5))) 将引发此错误,因为 2 × 5 = 10,但数组需要是二维的才能适合新形状。
TypeError: 'numpy.ndarray' 对象无法解释为整数 − 当为重塑提供的维度不是整数或指定不正确时,将发生此错误。确保传递给 reshape() 函数的所有维度都是有效的整数,并且它们正确地表示新形状。
处理重塑数组时的错误
以下是处理 NumPy 中重塑数组时出现的错误的方法:
检查数组大小 在重塑之前,使用 array.size() 函数验证原始数组的大小,并确保它与新形状维度的乘积匹配。
对未知维度使用 -1 重塑时,如果一个维度未知,请使用 -1 让 NumPy 根据数组中的元素总数和其它指定的维度自动计算它。
捕获异常 将你的重塑代码包装在 try-except 块中,以捕获潜在的错误并优雅地处理它们。这可以防止你的程序崩溃,并允许进行适当的错误消息或回退操作。
示例
在下面的示例中,我们尝试将具有 5 个元素的一维数组“arr”重塑为“2x3”二维数组,这将导致 ValueError,因为元素总数与指定的形状不匹配:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5]) try: # Attempt to reshape to an incompatible shape reshaped_arr = arr.reshape((2, 3)) except ValueError as e: print("Error Occurred During Reshaping:") print(e)
获得的错误如下:
Error Occurred During Reshaping: cannot reshape array of size 5 into shape (2,3)