我有一些大小合适的矩阵 (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/