Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将文本文件(双引号字符串w/%e%i sqrt z1 z2 log)输入到劳伦特系列的sympy、numpy或scipy中_String_File_Numpy_Sympy_Series - Fatal编程技术网

String 将文本文件(双引号字符串w/%e%i sqrt z1 z2 log)输入到劳伦特系列的sympy、numpy或scipy中

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 (在十六进制编辑器中查看文件时,最后

很长的标题,但我认为最好是提供大量信息

我有很长的表达式,使用符号,例如%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
(在十六进制编辑器中查看文件时,最后一个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
    时,我会记住这个技巧。我将把它添加到我的答案中,以防其他人发现它有用。