可以使用 Python 来实现这个功能,特别是利用 NumPy 或纯 Python 来完成 reshape
操作。下面是一个使用纯 Python 的解决方案:
代码实现:
def matrixReshape(mat, r, c):
m, n = len(mat), len(mat[0]) # 获取原始矩阵的行数和列数
if m * n != r * c:
return mat # 如果元素总数不同,则无法重塑,返回原矩阵
# 将矩阵元素展平成一维数组
elements = [num for row in mat for num in row]
# 按照新的 r * c 形状填充矩阵
return [elements[i * c: (i + 1) * c] for i in range(r)]
# 测试案例
mat = [[1, 2], [3, 4]]
r, c = 1, 4
print(matrixReshape(mat, r, c)) # 输出: [[1, 2, 3, 4]]
r, c = 2, 4
print(matrixReshape(mat, r, c)) # 输出: [[1, 2], [3, 4]](无法重塑,返回原矩阵)
解释:
- 检查可行性:如果
m * n != r * c
,则无法重塑,直接返回原矩阵。 - 展开矩阵:将二维矩阵元素按行优先顺序存入一维数组
elements
。 - 填充新矩阵:根据新的行列数,从
elements
切片填充新的r x c
形状的矩阵。
如果你用 NumPy,可以直接这样做:
import numpy as np
def matrixReshape_np(mat, r, c):
mat_np = np.array(mat)
if mat_np.size != r * c:
return mat.tolist() # 无法重塑,返回原矩阵
return mat_np.reshape(r, c).tolist()
# 测试案例
print(matrixReshape_np([[1, 2], [3, 4]], 1, 4))
这样代码会更加简洁。