String 将文本文件(双引号字符串w/%e%i sqrt z1 z2 log)输入到劳伦特系列的sympy、numpy或scipy中
很长的标题,但我认为最好是提供大量信息 我有很长的表达式,使用符号,例如%I、%e、log、z1和z2,它们夹在双引号之间,例如String 将文本文件(双引号字符串w/%e%i sqrt z1 z2 log)输入到劳伦特系列的sympy、numpy或scipy中,string,file,numpy,sympy,series,String,File,Numpy,Sympy,Series,很长的标题,但我认为最好是提供大量信息 我有很长的表达式,使用符号,例如%I、%e、log、z1和z2,它们夹在双引号之间,例如 "(4*z1*z2*%e^(z2^2+z1^2)*((%e^z1^2-%e^z2^2)^2*(96*%e^(13*(((-(202907687053026635*%i*sqrt(1037*sqrt(23)*%i+1463)*(log(9)*sqrt(2)*sqrt(7)*sqrt(1037*sqrt(23)*%i+....."X (在十六进制编辑器中查看文件时,最后
"(4*z1*z2*%e^(z2^2+z1^2)*((%e^z1^2-%e^z2^2)^2*(96*%e^(13*(((-(202907687053026635*%i*sqrt(1037*sqrt(23)*%i+1463)*(log(9)*sqrt(2)*sqrt(7)*sqrt(1037*sqrt(23)*%i+....."X
(在十六进制编辑器中查看文件时,最后一个X不是X,而是十六进制0A-不管是什么-不要认为在ascii图表上查找它会对它有很大帮助)
我想试试python/sympy/numpy/scipy/。。。合并取代了其他支持CAS的软件,但我不知道如何做到这一点,至少是从一个一致的“包”中。我看到了来自scipy教程的片段,或者来自numpy的片段,等等
我想取上面类似表达式的劳伦特级数-它是没有浮点数的精确表达式
希望这是一个容易理解的请求
致以最良好的祝愿
编辑-将Python更新为3.6-仍然是AttributeError
因此,在将符号exp等转换为可接受的字符串时,我看到了一些错误。这似乎效果更好,但在sympify之后,“ex”仍然没有被视为Sympy表达式:
(py3_kernel) sbh@sbh-MacBookPro ~ $ ipython
Python 3.6.3 (default, Oct 6 2017, 08:44:35)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import sympy as s
In [2]: import numpy as np
In [3]: from numpy import *
In [4]: from sympy import *
In [5]: from sympy.utilities.lambdify import lambdify, implemented_function, lambdastr
In [6]: with open('c.txt', 'r') as myfile:
...: d=myfile.read().replace('\n', '').replace('%i','I').replace('%e','exp').replace('^','**
...: ').replace('exp**','exp')
...:
In [7]: d
Out[7]: '"(4*z1*z2*exp(z2**2+z1**2)*sqrt(1037*sqrt(23)*I+1463))+log(1/2)+(sqrt(-I)*z1)/(sqrt(3)*23**(1/4))"'
In [8]: z1,z2 = s.symbols('z1,z2', real=True)
In [9]: ex = s.sympify(d)
In [10]: ex
Out[10]: '(4*z1*z2*exp(z2**2+z1**2)*sqrt(1037*sqrt(23)*I+1463))+log(1/2)+(sqrt(-I)*z1)/(sqrt(3)*23**(1/4))'
In [11]: type(ex)
Out[11]: str
In [12]: ex.subs({z1:0, z2:1})
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-63eab202c7b1> in <module>()
----> 1 ex.subs({z1:0, z2:1})
AttributeError: 'str' object has no attribute 'subs'
(py3_内核)sbh@sbh-MacBookPro~$ipython
Python 3.6.3(默认值,2017年10月6日,08:44:35)
有关详细信息,请键入“版权”、“信用”或“许可证”
IPython 6.2.1——一种增强的交互式Python。键入“?”以获取帮助。
在[1]中:将sympy作为s导入
在[2]中:将numpy作为np导入
在[3]中:从numpy导入*
在[4]中:来自sympy import*
在[5]中:从sympy.utilities.lambdify导入lambdify,实现的函数,lambdastr
在[6]中:以open('c.txt','r')作为myfile:
…:d=myfile.read().replace('\n','').replace('%i','i').replace('%e','exp').replace('^','**
…:')。替换('exp**','exp')
...:
在[7]:d中
[7]:“(4*z1*z2*exp(z2**2+z1**2)*sqrt(1037*sqrt(23)*I+1463))+log(1/2)+(sqrt(-I)*z1)/(sqrt(3)*23**(1/4))”
在[8]中:z1,z2=s.symbols('z1,z2',real=True)
在[9]中:ex=s.sympify(d)
In[10]:例如
[10]:“(4*z1*z2*exp(z2**2+z1**2)*sqrt(1037*sqrt(23)*I+1463))+log(1/2)+(sqrt(-I)*z1)/(sqrt(3)*23**(1/4))”
In[11]:类型(ex)
Out[11]:str
In[12]:ex.subs({z1:0,z2:1})
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1 ex.subs({z1:0,z2:1})
AttributeError:“str”对象没有属性“subs”
numpy.loadtxt()
通常用于将表格数据从文本文件读取到numpy数组中。最好使用Python将文件读入字符串变量,然后使用Sympy.sympify()
将其转换为Sympy表达式。
假设我有一个文件cal.txt
,其中包含一行字符串z1^2*exp(z2)*%I
。下面几行将读取它并将其转换为Symphy表达式
import sympy as s
with open('cal.txt', 'r') as myfile:
d=myfile.read().replace('\n', '').replace('%i',\
'I').replace('^','**').replace('"','')
z1,z2 = s.symbols('z1,z2')
ex = s.sympify(d)
ex2 = ex.subs([(z1,0),(z2,0)])
要使其正常工作,cal.txt
应包含有效的Sympy表达式
import sympy as s
with open('cal.txt', 'r') as myfile:
d=myfile.read().replace('\n', '').replace('%i',\
'I').replace('^','**').replace('"','')
z1,z2 = s.symbols('z1,z2')
ex = s.sympify(d)
ex2 = ex.subs([(z1,0),(z2,0)])
更新:
cal.txt
的内容修改为“z1^2*exp(z2)*%I”
,现在我也得到了相同的属性错误。因此,我们需要在字符串前后去掉“
”,以便sympify
正常工作。我已将上面的代码修改为replace(“,”)
双引号为null。希望这能奏效
z1,z2=s.symbols('z1,z2')
行替换为z1,z2=s.symbols('z1,z2',real=True)
,则ex2=ex.subs([(z1,0),(z2,0)]
行将不会给出所需的输出,因为假设我们在z1
和z2
上已经指定。因此,在使用sympify
时,在指定符号的假设时需要小心。此信息的来源是链接的“将字符串转换为表达式”部分
抱歉,%e只是e,如%e^3=e^3;%i是虚数;我意识到a^b对于python-y的东西应该是**b,但我想再次避免对近百个文件进行十六进制编辑。。。我不能再做一个。替换('^','**')吗?我想我相信你,但我看不出它是否有效,因为当我尝试做一些简单的事情时,例如ex.subs({z1:0,z2:4}),我发现
'str'对象没有属性'subs'
-我仍然认为ex不是我能“工作”的东西还有…?我在Spyder3中运行了代码,它似乎对我有用ex
是一个Symphy表达式对象。您使用的是什么版本的Symphy和Python?我使用的是2.7.12和Symphy 1.1.1(python2,因为我使用的大型软件需要它)。当我尝试使用python3和1.1.1 SymphyGreat时,我在我的问题中添加了一些信息!我也在想办法。将来使用sympify
时,我会记住这个技巧。我将把它添加到我的答案中,以防其他人发现它有用。