Jan*_* SE 4 csv wolfram-mathematica complex-numbers numpy-ndarray
我已将数据从 mathematica 导出到 csv 文件。文件结构如下:
"x","y","Ex","Ey"
0.,0.,0.+0.*I,-3.0434726787506006*^-12+3.4234894344189825*^-12*I
0.,0.,0.+0.*I,-5.0434726787506006*^-12+10.4234894344189825*^-13*I
...
Run Code Online (Sandbox Code Playgroud)
我正在用 pandas 读取数据,但出现错误
import csv
import pandas as pd
import numpy as np
df=pd.read_csv('filename.csv')
df.columns=['x', 'y', 'Ex','Ey']
df['Ey'] = df['Ey'].str.replace('*^','E')
df['Ey'] = df['Ey'].str.replace('I','1j').apply(lambda x: np.complex(x))
Run Code Online (Sandbox Code Playgroud)
编辑:我在代码的倒数第二行中收到以下错误:
Traceback (most recent call last):
File "plot.py", line 6, in <module>
df['Ey'] = df['Ey'].str.replace('*^','E')
File "/home/.../.local/lib/python2.7/site-packages/pandas/core/strings.py", line 1579, in replace
flags=flags)
File "/home/.../.local/lib/python2.7/site-packages/pandas/core/strings.py", line 424, in str_replace
regex = re.compile(pat, flags=flags)
File "/usr/lib/python2.7/re.py", line 194, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
Run Code Online (Sandbox Code Playgroud)
当我写作时
df['Ey'] = df['Ey'].str.replace('*','E')
Run Code Online (Sandbox Code Playgroud)
或者
df['Ey'] = df['Ey'].str.replace('^','E')
Run Code Online (Sandbox Code Playgroud)
我没有收到错误。好像只能给出一个被替换的字符?
为什么要因为弄乱 ascii 编码的浮点数而自责呢?
以下是如何使用原始二进制文件在 python 和 mathematica 之间交换复杂数组。
在数学中:
cdat = RandomComplex[{0, 1 + I}, 5]
Run Code Online (Sandbox Code Playgroud)
{0.0142816 + 0.0835513 I,0.434109 + 0.977644 I,0.579678 + 0.337286 I,0.426271 + 0.166166 I,0.363249 + 0.0867334 I}
f = OpenWrite["test", BinaryFormat -> True]
BinaryWrite[f, cdat, "Complex64"]
Close[f]
Run Code Online (Sandbox Code Playgroud)
或者:
Export["test", cdat, "Binary", "DataFormat" -> "Complex64"]
Run Code Online (Sandbox Code Playgroud)
在Python中:
import numpy as np
x=np.fromfile('test',np.complex64)
print x
Run Code Online (Sandbox Code Playgroud)
[0.01428160+0.0835513j 0.43410850+0.97764391j 0.57967812+0.3372865j 0.42627081+0.16616575j 0.36324903+0.08673338j]
走另一条路:
y=np.array([[1+2j],[3+4j]],np.complex64)
y.tofile('test')
f = OpenRead["test", BinaryFormat -> True]
BinaryReadList[f, "Complex64"]
Close[f]
Run Code Online (Sandbox Code Playgroud)
请注意,这将比通过 csv 交换数据快几个数量级。
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |