sympy 的高级索引?

Advanced indexing for sympy?

使用 numpy,我能够 select 具有整数列表的数组中的任意一组项目:

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a[[0,2]]
array([1, 3])

这似乎不适用于 sympy 矩阵,因为代码:

>>> import sympy as sp
>>> b = sp.Matrix([1,2,3])
>>> b[[0,2]]

导致错误消息:

**Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/sympy/matrices/dense.py", line 94, in __getitem__
    return self._mat[a2idx(key)]
  File "/usr/lib/python2.7/dist-packages/sympy/matrices/matrices.py", line 4120, in a2idx
    raise IndexError("Invalid index a[%r]" % (j, ))
IndexError: Invalid index a[[0, 2]]

我的问题是在 sympy 中是否有办法做到这一点?

你的ab不代表相似的对象,实际上a是一个1x3"matrix"(1行3列),即一个向量,而 b 是一个 3x1 矩阵(3 行,1 列)。

>>> a
array([1, 2, 3])
>>> b
Matrix([
[1],
[2],
[3]])

对应的 numpynumpy.array([[1], [2], [3]]),而不是你的 a

知道,b[[0,2]] 没有任何意义,因为您缺少其中一个维度的索引。如果只想select第一行和第三行,需要指定第二个维度:

>>> b[[0, 2], :]
Matrix([
[1],
[3]])

注意:使用numpy,你可以按照你想要的方式访问3x1矩阵,看起来simply更严格比 numpy.