2017-06-03 101 views
-1

我有一个由mathematica生成的文本文件。我想将文本文件python转换为可读。主要问题是文件将数组存储为大括号(“{......}”)。另一个问题是,数学使用I作为python使用j的虚数。解决办法是什么?复数交换阅读Mathematica生成的文本文件

+5

再次问同样的问题。 ? https://stackoverflow.com/q/44173958/1004168。你应该清楚地解释为什么你想要使用那种奥术格式,而不是十几个其他人更容易处理。 – agentp

+0

@agentp说什么。但是也许你可以用'CForm'加上一些支持的定义来得到你想要的,例如'def List(* x):return list(x)'。 – Alan

+2

[数据从Mathematica导入到Python]可能的重复(https://stackoverflow.com/questions/44173958/data-from-mathematica-import-to-python) –

回答

0

例如:

数学:

Export["cmplx.csv",RandomComplex[{-1-I,1+I} , {3,3}] 

蟒:

import csv 
    reader=csv.reader(open('cmplx.csv','r')) 
    complexarray=[complex(item.replace('*I','j')) 
     for row in reader for item in row] 

这适合真正为少量数据。对于大型阵列,我会拆分实部和虚部以分开阵列,使用此处显示的二进制交换https://stackoverflow.com/a/44184067/1004168并重新组装以使其与numpy复杂。

数学:

m = Table[RandomComplex[], {3}, {3}] 
f = OpenWrite["test.bin", BinaryFormat -> True]; 
BinaryWrite[f, ArrayDepth[m], "Integer32"]; 
BinaryWrite[f, Dimensions[m], "Integer32"]; 
BinaryWrite[f, Re[m], "Real64"]; 
BinaryWrite[f, Im[m], "Real64"]; 
Close[f] 

蟒蛇:

import numpy as np 
with open('test.bin','rb') as f: 
depth=np.fromfile(f,dtype=np.dtype('int32'),count=1) 
dims=np.fromfile(f,dtype=np.dtype('int32'),count=depth) 
count=reduce(lambda x,y:x*y,dims) 
complexarray=np.reshape(np.fromfile(f,dtype=np.dtype('float64'), 
    count=count),dims) 
complexarray=complexarray+ 
    1j*np.reshape(np.fromfile(f,dtype=np.dtype('float64'), 
    count=count),dims)