Tap*_*ala 7 python numpy sympy
使用 numpy,我可以从带有整数列表的数组中选择任意一组项目:
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a[[0,2]]
array([1, 3])
Run Code Online (Sandbox Code Playgroud)
这似乎不适用于 sympy 矩阵,因为代码:
>>> import sympy as sp
>>> b = sp.Matrix([1,2,3])
>>> b[[0,2]]
Run Code Online (Sandbox Code Playgroud)
结果出现错误消息:
**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]]
Run Code Online (Sandbox Code Playgroud)
我的问题是是否有办法在 sympy 中做到这一点?
你的a
和b
并不代表类似的对象,实际上a
是一个1x3
“矩阵”(一行3列),即向量,而 则b
是一个3x1
矩阵(3行1列)。
>>> a
array([1, 2, 3])
>>> b
Matrix([
[1],
[2],
[3]])
Run Code Online (Sandbox Code Playgroud)
相当于,不是你numpy
的numpy.array([[1], [2], [3]])
a
。
知道这一点b[[0,2]]
没有任何意义,因为您缺少某个维度的索引。如果只想选择第一行和第三行,则需要指定第二个维度:
>>> b[[0, 2], :]
Matrix([
[1],
[3]])
Run Code Online (Sandbox Code Playgroud)
注意:使用numpy
,您可以按照3x1
您想要的方式访问矩阵,它看起来simply
比 更严格numpy
。