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

如何在SymPy中创建和查看形状可变的索引矩阵集合

问题

在SymPy中,我想要创建一组X_i矩阵,每个矩阵的尺寸为n_i × p(其中i = 1, ..., M,出自Pinheiro和Bates 2000年著作第58页)。请问能否实现?我还希望能打印这组矩阵查看每个矩阵的结构,最终这些X_i矩阵会用于后续的运算。

我查阅了Indexed的文档,但我的理解是它仅能提供一个可索引的符号,无法满足创建可变尺寸矩阵组的需求。

尝试的解决方案

我首先尝试了以下代码:

import sympy as sm
sm.init_printing()

M = sm.symbols('M', integer = True) # M组
i = sm.Idx('i', (1, M))
X = sm.IndexedBase('X')
X[i].ranges

输出结果为:

[(1, M)]

但这并不是一组矩阵,而且每个矩阵也没有可变的行数(行数需要由n_i决定)。

之后我进一步搜索并咨询了相关工具,得到的信息显示似乎无法为索引设置任意上限。工具提供了如下模板,但它指定了p = 2和M = 5,且每个矩阵的行数固定为5:

n = 5
p = 2
M = 5
X=[sm.Matrix(n, p, lambda r, c: f'a_{r+1}{c+1}_{i}') for i in range(1,M+1)]
X

输出结果为:

⎡⎡a₁₁ ₁  a₁₂ ₁⎤  ⎡a₁₁ ₂  a₁₂ ₂⎤  ⎡a₁₁ ₃  a₁₂ ₃⎤  ⎡a₁₁ ₄  a₁₂ ₄⎤  ⎡a₁₁ ₅  a₁₂ ₅
⎢⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            
⎢⎢a₂₁ ₁  a₂₂ ₁⎥  ⎢a₂₁ ₂  a₂₂ ₂⎥  ⎢a₂₁ ₃  a₂₂ ₃⎥  ⎢a₂₁ ₄  a₂₂ ₄⎥  ⎢a₂₁ ₅  a₂₂ ₅
⎢⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            
⎢⎢a₃₁ ₁  a₃₂ ₁⎥, ⎢a₃₁ ₂  a₃₂ ₂⎥, ⎢a₃₁ ₃  a₃₂ ₃⎥, ⎢a₃₁ ₄  a₃₂ ₄⎥, ⎢a₃₁ ₅  a₃₂ ₅
⎢⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            
⎢⎢a₄₁ ₁  a₄₂ ₁⎥  ⎢a₄₁ ₂  a₄₂ ₂⎥  ⎢a₄₁ ₃  a₄₂ ₃⎥  ⎢a₄₁ ₄  a₄₂ ₄⎥  ⎢a₄₁ ₅  a₄₂ ₅
⎢⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            ⎥  ⎢            
⎣⎣a₅₁ ₁  a₅₂ ₁⎦  ⎣a₅₁ ₂  a₅₂ ₂⎦  ⎣a₅₁ ₃  a₅₂ ₃⎦  ⎣a₅₁ ₄  a₅₂ ₄⎦  ⎣a₅₁ ₅  a₅₂ ₅

⎤⎤
⎥⎥
⎥⎥
⎥⎥
⎥⎥
⎥⎥
⎥⎥
⎥⎥
⎦⎦

尽管可以进一步调整代码生成行数不同的M个矩阵,但我有两点疑虑:

  1. 这种方法可能无法适配SymPy的其他运算(如矩阵代数、向量微积分等);
  2. 由于没有使用Idx或IndexedBase,这不符合SymPy的惯用写法。

恳请提供可行的解决方案。

可接受但非首选的解决方案
  • 将M定义为具体整数,如M = 5,设置明确的上限
  • 将每个n_i和p定义为具体整数,比如n = [10,10,12,12,24]、p=5,让每个X_i矩阵被明确定义

内容的提问来源于stack exchange,提问作者user26548996

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:42:11