Python保存一个(稀疏)矩阵,里面有一个变量

标签 python sympy symbolic-math

我有一些大小合适的矩阵 (2000*2000),我希望在矩阵的元素中有符号表达式 - 即 .9**b + .8**b + .7**b ... 是一个元素的例子。矩阵非常稀疏。

我通过添加中间计算来创建这些矩阵。我想将它们存储到磁盘以便稍后读取并使用不同的 b 值进行评估。

我玩过 sympy,它确实可以完成我需要它做的事情,但是做简单的添加速度慢得令人 NumPy 。从我读到的内容来看,theano 或 tensorflow 似乎可以用 Tensor 做到这一点,但我不知道如何在 Tensor 中放置一个符号。

谁能为我指明正确的方向,以指出用于此任务的最佳工具?我更喜欢它在 python 中,但如果 python 之外的东西也能完成这项工作,那就太好了。

最佳答案

问题很可能来自于您正在获取象征性力量这一事实。但是,无论出于何种原因,SymPy 都试图为象征性力量找到一种明确的形式。例如:

In [12]: x = Symbol('x')

In [13]: print(Matrix([[1, 2], [3, 4]])**x)
Matrix([[-2*(5/2 + sqrt(33)/2)**x*(-2/((-3/2 + sqrt(33)/2)*(-1/2 + sqrt(33)/6)**2*(sqrt(33)/4 + 11/4)) + 1/(-1/2 + sqrt(33)/6))/(-sqrt(33)/2 - 3/2) + 2*(-sqrt(33)/2 + 5/2)**x/((-3/2 + sqrt(33)/2)*(-1/2 + sqrt(33)/6)*(sqrt(33)/4 + 11/4)), -4*(5/2 + sqrt(33)/2)**x/((-3/2 + sqrt(33)/2)*(-1/2 + sqrt(33)/6)*(-sqrt(33)/2 - 3/2)*(sqrt(33)/4 + 11/4)) - 2*(-sqrt(33)/2 + 5/2)**x/((-3/2 + sqrt(33)/2)*(sqrt(33)/4 + 11/4))], [(5/2 + sqrt(33)/2)**x*(-2/((-3/2 + sqrt(33)/2)*(-1/2 + sqrt(33)/6)**2*(sqrt(33)/4 + 11/4)) + 1/(-1/2 + sqrt(33)/6)) - (-sqrt(33)/2 + 5/2)**x/((-1/2 + sqrt(33)/6)*(sqrt(33)/4 + 11/4)), 2*(5/2 + sqrt(33)/2)**x/((-3/2 + sqrt(33)/2)*(-1/2 + sqrt(33)/6)*(sqrt(33)/4 + 11/4)) + (-sqrt(33)/2 + 5/2)**x/(sqrt(33)/4 + 11/4)]])

这真的是你想要做的吗?您是否提前知道 b 的值?您可以使用 MatPow(arr, b) 将表达式作为幂不计算。

关于Python保存一个(稀疏)矩阵,里面有一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183417/

相关文章:

python - 正则表达式匹配引号括起来的字符串文字而不匹配其他字符串

python - 使用pywin32跳转到word文档中的指定页面

python - 函数列表相对于变量列表的微分

python - 求解三次方程,sympy

python-2.x - sympy:替换结果不正确

python - SymPy 是否正确求解此 ODE?

python - Scipy 使用数据框优化最小化

自动创建数据框的 Python Loop

python - 如何在 sympy 中使用常量 LETTER?

java - 设计符号方程求解器