我使用sympy(python3.6,sympy1.0)来简化数学证明中矩阵变换的计算。你知道吗
为了计算Schur补,需要对由符号矩阵组成的块矩阵进行切片。你知道吗
直接对矩阵进行寻址:
M[0:1,1]
不起作用,我试过同构矩阵表达式.blockmatrix.blocks块不幸的是块在寻址一系列块时弄乱了矩阵的维数:
from sympy import *
n = Symbol('n')
Aj = MatrixSymbol('Aj', n,n)
M = BlockMatrix([[Aj, Aj],[Aj, Aj]])
M1 = M.blocks[0:1,0:1]
M2 = M.blocks[0,0]
print(M1.shape)
print(M2.shape)
M.blocks返回矩阵M1的维数为1,1的矩阵,而矩阵M2的维数为n,n
在使用区间时,有没有关于如何获得正确尺寸的建议?你知道吗
方法
blocks
返回一个ImmutableMatrix对象,而不是BlockMatrix对象。供参考:ImmutableMatrix对象的形状由其包含的符号数决定;符号的结构不考虑在内。因此,得到(1,1)。你知道吗
使用
M.blocks[0,0]
可以访问矩阵的一个元素,即Aj。这被称为MatrixSymbol,因此形状按预期工作。你知道吗当使用
M.blocks[0:1, 0:1]
时,您可以切片一个symphy矩阵。切片总是返回一个子矩阵,即使切片的大小是1乘1。所以你得到一个带有一个条目的不可变矩阵,Matrix([[Aj]])
。如上所述,这个东西的形状是(1,1),因为没有块结构的识别。你知道吗正如user2357112所建议的,将块的切片输出转换为块矩阵导致基于
Aj
的形状来确定形状:检查以意外方式运行的对象的类型通常很有用:例如
type(M1)
和type(M2)
。你知道吗相关问题 更多 >
编程相关推荐