嗨,我正在尝试索引一个符号向量的范围。
我的第一个想法是使用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]]
(这并不试图处理关键词的争论;它更多的是概念的证明。(