编写Python程序生成矩阵Aⁿ并解决NumPy维度匹配报错问题
问题修复与正确实现
错误原因
第三次调用np.block时,子块维度不匹配:此时A已是8×8矩阵,第一行的A(8×8)与np.zeros((8,4))拼接后为8×12;第二行的np.zeros((4,8))(4行)与flipud(A)(8行)拼接后为12×8,行数、列数无法对应,触发维度错误。且这一步拼接完全多余,不符合生成2n×2n矩阵的需求。
正确实现代码
import numpy as np def generate_A_n(n): # 生成n×n核心三对角矩阵:主对角线1,上对角线2,下对角线3 core = np.diag(np.ones(n)) core += np.diag(np.ones(n-1) * 2, k=1) core += np.diag(np.ones(n-1) * 3, k=-1) # 构造2n×2n矩阵,右下角为核心矩阵左右翻转结果,其余未显示元素为0 A_n = np.block([ [core, np.zeros((n, n))], [np.zeros((n, n)), np.fliplr(core)] ]) return A_n # 测试n=4的情况 n = 4 print(generate_A_n(n))
说明
- 用
np.diag批量生成三对角元素,避免手动写死矩阵,支持任意自然数n - 严格按照需求构造2n×2n矩阵:左上角为核心三对角矩阵,右上角、左下角为零矩阵,右下角为核心矩阵左右翻转后的结果
- 完全使用提示的
np.block和np.fliplr,无循环操作
内容的提问来源于stack exchange,提问作者lenamagdalena
相关产品推荐
相关产品推荐

