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 中是否有办法做到这一点?
你的a
和b
不代表相似的对象,实际上a
是一个1x3
"matrix"(1行3列),即一个向量,而 b
是一个 3x1
矩阵(3 行,1 列)。
>>> a
array([1, 2, 3])
>>> b
Matrix([
[1],
[2],
[3]])
对应的 numpy
是 numpy.array([[1], [2], [3]])
,而不是你的 a
。
知道,b[[0,2]]
没有任何意义,因为您缺少其中一个维度的索引。如果只想select第一行和第三行,需要指定第二个维度:
>>> b[[0, 2], :]
Matrix([
[1],
[3]])
注意:使用numpy
,你可以按照你想要的方式访问3x1
矩阵,看起来simply
更严格比 numpy
.
使用 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 中是否有办法做到这一点?
你的a
和b
不代表相似的对象,实际上a
是一个1x3
"matrix"(1行3列),即一个向量,而 b
是一个 3x1
矩阵(3 行,1 列)。
>>> a
array([1, 2, 3])
>>> b
Matrix([
[1],
[2],
[3]])
对应的 numpy
是 numpy.array([[1], [2], [3]])
,而不是你的 a
。
知道,b[[0,2]]
没有任何意义,因为您缺少其中一个维度的索引。如果只想select第一行和第三行,需要指定第二个维度:
>>> b[[0, 2], :]
Matrix([
[1],
[3]])
注意:使用numpy
,你可以按照你想要的方式访问3x1
矩阵,看起来simply
更严格比 numpy
.