python - 如何在仍然能够索引的同时抑制评估?

标签 python numpy math indexing sympy

我有两个小但非常复杂的矩阵,我想将它们相乘。我使用 sympy 完成了此操作:

C=sympy.MatMul(A,B,hold=True)

这给了我一个 MatMul 对象,它节省了大量时间,而且我对符号表达式不感兴趣,而是我想稍后在特定点进行评估。

如果我的计算到此结束就好了,但是我需要使用 C 的元素来定义一个新的方程式,但是,我无法对它进行索引。我得到以下信息,

In [286]: C[0]
Traceback (most recent call last):

  File "<ipython-input-286-829e2440bf19>", line 1, in <module>
    C[0]

  File "C:\Anaconda3\lib\site-packages\sympy\matrices\expressions\matexpr.py", line 242, in __getitem__
    raise IndexError("Single index only supported for "

IndexError: Single index only supported for non-symbolic matrix shapes.

是否有可能以某种方式索引这样的对象?例如,在 maple 中,我可以使用分号来抑制输出,同时保留有关结果对象结构的信息,以便我可以对其进行索引。

最佳答案

您可以索引 C 的元素,例如C[0,0]。所以这会给你第一行作为列表:

row0 = [C[0, k] for k in range(C.shape[1])]

这是一个例子。 xy 是 sympy 符号。

In [40]: A
Out[40]: 
Matrix([
[2*x + 1, x + 3],
[     -2,     3]])

In [41]: B
Out[41]: 
Matrix([
[-3,   3],
[ y, 2*y]])

In [42]: C = sympy.MatMul(A, B, hold=True)

In [43]: C[0,0]
Out[43]: -6*x + y*(x + 3) - 3

In [44]: [C[0,k] for k in range(C.shape[1])]
Out[44]: [-6*x + y*(x + 3) - 3, 6*x + 2*y*(x + 3) + 3]

关于python - 如何在仍然能够索引的同时抑制评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375880/

相关文章:

从世界空间骨骼矩阵计算绑定(bind)姿势/蒙皮矩阵

python - 使 ModelForm 与 Django 中的中间模型的多对多关系工作的步骤是什么?

python - 使用 django 和 JWT 在 N 分钟后重新登录

python - 如何修复 Heroku Dyno 不显示的问题?

python - 创建一个没有行替换的numpy矩阵

python - 如何将 numpy 数组拆分为重叠的图 block ?

javascript - 获取一点的斜率和一个 Angular (以度为单位)

python - 在 pandas 中透视数据框,同时为值创建额外的新列

python - 如何使用Pynsist在python中安装numpy

找到最小 N 的算法,使得 N!可以被素数的幂整除