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.
有没有在 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.