符号向量的 sympy 索引范围
sympy index range of vector of symbols
您好,我正在尝试索引符号向量的范围。
我的第一个想法是使用 MatrixSymbol
A = MatrixSymbol('A',10,1)
B = Matrix(A[0:2]) # does not work!
然后我想我可以使用 IndexBased,但是我如何生成子矩阵 B(我无法索引范围)
A=IndexedBased('A')
B=Matrix([A[0],A[1]]) # works but I want to define a range
必须有一个正确的方法来做到这一点。
IndexedBase 会给你一个像符号一样的一维向量。
您可以使用带有 range
的列表理解,给出索引:
>>> a = IndexedBase("A")
>>> Matrix([a[i] for i in range(2)])
Matrix([
[A[0]],
[A[1]]])
由于您在 Python 中工作,如果您想在 IndexedBase 上使用直接切片,您可以自由修改例程以满足您的需要:
def gi(self, slc):
if isinstance(slc, slice):
a,b,s=slc.start, slc.stop, slc.step
s = s or 1
a = a or 0
assert all(type(i) is int or i is None for i in (a,b,s))
assert b is not None
rv = []
for i in range(a,b,s):
rv.append(self[i])
return rv
return _gi(self, slc)
_gi = IndexedBase.__getitem__
IndexedBase.__getitem__ = gi
修改后你现在可以做:
>>> x = IndexedBase('x')
>>> x[0]
x[0]
>>> x[:2]
[x[0], x[1]]
(这并不试图处理关键字参数;它更像是一个概念证明。)
您好,我正在尝试索引符号向量的范围。
我的第一个想法是使用 MatrixSymbol
A = MatrixSymbol('A',10,1)
B = Matrix(A[0:2]) # does not work!
然后我想我可以使用 IndexBased,但是我如何生成子矩阵 B(我无法索引范围)
A=IndexedBased('A')
B=Matrix([A[0],A[1]]) # works but I want to define a range
必须有一个正确的方法来做到这一点。
IndexedBase 会给你一个像符号一样的一维向量。
您可以使用带有 range
的列表理解,给出索引:
>>> a = IndexedBase("A")
>>> Matrix([a[i] for i in range(2)])
Matrix([
[A[0]],
[A[1]]])
由于您在 Python 中工作,如果您想在 IndexedBase 上使用直接切片,您可以自由修改例程以满足您的需要:
def gi(self, slc):
if isinstance(slc, slice):
a,b,s=slc.start, slc.stop, slc.step
s = s or 1
a = a or 0
assert all(type(i) is int or i is None for i in (a,b,s))
assert b is not None
rv = []
for i in range(a,b,s):
rv.append(self[i])
return rv
return _gi(self, slc)
_gi = IndexedBase.__getitem__
IndexedBase.__getitem__ = gi
修改后你现在可以做:
>>> x = IndexedBase('x')
>>> x[0]
x[0]
>>> x[:2]
[x[0], x[1]]
(这并不试图处理关键字参数;它更像是一个概念证明。)