SymPy:删除矩阵的多行

SymPy: Delete multiple rows of a matrix

有没有在 SymPy 中删除矩阵的多行的方法(不使用 NumPy)?

我明白.row_del()一次只能删除一行。

from sympy import *

a_1_1, a_1_2, a_1_3 = symbols ('a_1_1 a_1_2 a_1_3')
a_2_1, a_2_2, a_2_3 = symbols ('a_2_1 a_2_2 a_2_3')
a_3_1, a_3_2, a_3_3 = symbols ('a_3_1 a_3_2 a_3_3')

A = Matrix ([
    [a_1_1, a_1_2, a_1_3], 
    [a_2_1, a_2_2, a_2_3], 
    [a_3_1, a_3_2, a_3_3]
])

A.row_del (1 : 2)

不(还?)工作:

    A.row_del (1 : 2)
                 ^
SyntaxError: invalid syntax

您可以对 select 所需的行使用切片或外部索引:

In [8]: A = MatrixSymbol('A', 3, 3).as_explicit()

In [9]: A
Out[9]: 
⎡A₀₀  A₀₁  A₀₂⎤
⎢             ⎥
⎢A₁₀  A₁₁  A₁₂⎥
⎢             ⎥
⎣A₂₀  A₂₁  A₂₂⎦

In [10]: A[:1,:]
Out[10]: [A₀₀  A₀₁  A₀₂]

In [11]: A[[0,2],:]
Out[11]: 
⎡A₀₀  A₀₁  A₀₂⎤
⎢             ⎥
⎣A₂₀  A₂₁  A₂₂⎦

关于您的 follow-up 问题,在 Python 中工作的部分好处在于您可以编写自己的实用程序函数,使事情按您想要的方式工作。因此,您可以创建一个函数来创建一个矩阵,该矩阵会根据需要自动返回索引。还要注意,选择带有列表的行或列会将它们按要求的顺序排列:

>>> a1rc = lambda a,r,c: MatrixSymbol(a, r+1, c+1).as_explicit()[1:,1:]
>>> a1rc("A",3,4)
Matrix([
[A[1, 1], A[1, 2], A[1, 3], A[1, 4]],
[A[2, 1], A[2, 2], A[2, 3], A[2, 4]],
[A[3, 1], A[3, 2], A[3, 3], A[3, 4]]])
>>> _[[2,0],:]  # row 2 will come first, then row 0
Matrix([
[A[3, 1], A[3, 2], A[3, 3], A[3, 4]],
[A[1, 1], A[1, 2], A[1, 3], A[1, 4]]])

select 项目切片的 : 语法仅在 Python 的方括号内受支持。这就是错误是 SyntaxError 的原因。所以即使 row_del 函数确实支持一次删除多行,它的语法看起来也不像 row_del(1:2),因为那是无效的 Python.