[Deep-ML]Reshape Matrix(重塑矩阵)

发布于:2025-04-08 ⋅ 阅读:(11) ⋅ 点赞:(0)

Reshape Matrix(重塑矩阵)

题目链接:

Reshape Matrix(重塑矩阵)https://www.deep-ml.com/problems/3

题目描述:

难度:

easy(简单)

分类:

Linear Algebra(线性代数)。

题目:

写一个 Python 函数,将给定的矩阵重塑为指定的形状。如果无法重塑,则返回一个空列表`[]`。

示例:

解释:

重塑矩阵。
矩阵重塑涉及改变矩阵的形状而不改变其数据。这在许多机器学习任务中至关重要,在这些任务中,输入数据需要以特定方式格式化。
例如,考虑矩阵 𝑀:

原始矩阵 M:

重塑后的矩阵 M',形状为(4, 2):

重要说明:确保在重塑过程中元素总数保持不变。

题目解析:

题解如下:

import numpy as np

def reshape_matrix(a: list[list[int|float]], new_shape: tuple[int, int]) -> list[list[int|float]]:
    original_elements = len(a) * len(a[0]) if a else 0
    new_elements = new_shape[0] * new_shape[1]
    
    if original_elements != new_elements:
        return []
    
    np_array = np.array(a)
    reshaped_np_array = np_array.reshape(new_shape)
    return reshaped_np_array.tolist()

代码解释:

1. 元素总数校验:
重塑矩阵的前提是原始矩阵和目标形状的元素总数一致。通过计算 original_elements(原矩阵元素数)和 new_elements(新形状元素数),若不相等则直接返回空列表。
2. 矩阵重塑实现:

  • 借助 NumPy 的 np.array(a) 将 Python 列表转换为 NumPy 数组,利用其高效的矩阵操作能力。

  • 通过 reshape(new_shape) 按目标形状重新排列元素。

  • 最后用 tolist() 将 NumPy 数组转回 Python 列表,满足函数返回格式要求。

注释版本:

import numpy as np

def reshape_matrix(a: list[list[int | float]], new_shape: tuple[int, int]) -> list[list[int | float]]:
    # 计算原始矩阵的元素总数,处理原矩阵为空的情况避免索引错误
    original_elements = len(a) * len(a[0]) if a else 0
    # 计算新形状所需的元素总数(行数 × 列数)
    new_elements = new_shape[0] * new_shape[1]
    
    # 检查元素总数是否匹配,不匹配则无法重塑,返回空列表
    if original_elements != new_elements:
        return []
    
    # 将输入列表转换为NumPy数组,以便使用矩阵重塑功能
    np_array = np.array(a)
    # 对数组进行重塑,应用指定的新形状
    reshaped_np_array = np_array.reshape(new_shape)
    # 将重塑后的NumPy数组转换回Python列表并返回
    return reshaped_np_array.tolist()

思考总结:

  1. 核心逻辑分析
    矩阵重塑的前提是元素总数不变。因此,首先计算原矩阵元素总数(len(a) * len(a[0]))和新形状元素总数(new_shape[0] * new_shape[1]),若不相等直接返回空列表,确保重塑的可行性。

  2. 工具应用
    借助 NumPy 的高效矩阵操作能力:

    • 将 Python 列表转换为 NumPy 数组(np.array(a)),利用其 reshape 方法按指定形状重塑。

    • 最后通过 tolist() 将结果转回 Python 列表,满足函数返回格式要求。

  3. 边界与验证

    • 处理原矩阵为空的边界情况(if a else 0),避免索引错误。

    • 通过示例测试验证代码逻辑,确保输入输出符合预期,如将 2×4 矩阵重塑为 4×2 时的正确转换。

本题通过 “元素总数校验 + NumPy 矩阵操作” 实现功能,先验证重塑的可能性,再借助工具完成重塑,最后验证代码鲁棒性,形成完整的解题逻辑。

 


网站公告

今日签到

点亮在社区的每一天
去签到