You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Numpy递归构造超立方体矩阵遇数组广播等问题

解决Numpy递归构造超立方体矩阵的形状不兼容问题

问题原因

你遇到的ValueError是因为直接用np.array([[Qn(n-1), I], [I, Qn(n-1)]])嵌套矩阵时,Numpy会将每个子矩阵作为高维数组的元素,而非拼接成一个二维矩阵。这种写法会生成形状不均匀的高维数组,不符合预期的二维分块矩阵结构。

解决方案

使用Numpy的np.block()函数,它专门用于拼接分块矩阵,能完美适配递归构造超立方体矩阵的需求。该函数会将传入的分块列表按行列拼接成一个单一的二维矩阵。

修改后的代码

import numpy as np
from numpy import linalg as LA

Q1 = np.array([[0, 1],
               [1, 0]])

def Qn(n):
    if n <= 1:
        return Q1
    else:
        size = 2 ** (n-1)  # 直接用整数幂次计算,避免浮点转换误差
        Q_prev = Qn(n-1)
        I = np.identity(size)
        # 用np.block拼接分块矩阵,生成2^n x 2^n的二维矩阵
        return np.block([[Q_prev, I],
                         [I, Q_prev]])
    
Q3 = Qn(3)
# 可选:打印Q3验证矩阵结构
# print(Q3)

eig_value, eig_vectors = LA.eig(Q3)
print(eig_value)

关键说明

  • np.block()的作用:它接收一个二维列表,列表中的每个元素是要拼接的子矩阵,最终会将这些子矩阵按行和列的顺序拼接成一个完整的二维矩阵,完全匹配超立方体矩阵的递归分块定义。
  • 优化尺寸计算:用2 ** (n-1)替代int(np.exp2(n-1)),既避免了浮点运算的潜在精度问题,也提升了计算效率。
  • 递归逻辑保持:核心的递归结构不变,只是将数组构造方式从np.array替换为np.block,解决了形状不兼容的问题。

内容的提问来源于stack exchange,提问作者mo-alowais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:07:24