Mathematica:导入表与导出表不同

时间:2014-06-13 20:39:45

标签: import wolfram-mathematica complex-numbers

如果这是一个愚蠢的问题,我道歉,但这让我发狂。我在Mathematica中生成一个大型的复数表,我想保存它并在以后读取它。看一下我写的文档:

In[1626]:= foo = Table[i + I j , {i, 1, 3}, {j, 1, 3}];
Export["foo.dat", foo, "Table"]; 
fooRead = Import["foo.dat", "Table"]

生成:

Out[1628]= {
     {"1+I", "1+2*I", "1+3*I"},
     {"2+I", "2+2*I", "2+3*I"},
     {"3+I", "3+2*I", "3+3*I"}
}

看起来这样可以,但请注意上面输出中的引号。它不是同一个矩阵!如果你把它放在一边,你会得到奇怪的结果!

In[1629]:= foo^2
           fooRead^2

Out[1629]= {
     {    2 I, -3 + 4 I,  -8 + 6 I},
     {3 + 4 I,      8 I, -5 + 12 I},
     {8 + 6 I, 5 + 12 I,      18 I}
}

Out[1630]= {
     {("1+I")^2, ("1+2*I")^2, ("1+3*I")^2},
     {("2+I")^2, ("2+2*I")^2, ("2+3*I")^2},
     {("3+I")^2, ("3+2*I")^2, ("3+3*I")^2}
}

所以,我的问题是:如何写出一个复杂的表格,以便我以后再读一遍?为什么Mathematica不会导入它导出的文件? (ADthanksVANCE)

1 个答案:

答案 0 :(得分:2)

如果您只需要mathematica来阅读文件,请使用" .m"格式:

 foo = Table[i + I j, {i, 1, 3}, {j, 1, 3}];
 Export["foo.m", foo];
 fooRead = Import["foo.m"]

感谢@Aakter注意到这被称为" Package"格式。 (也" .mx")

您可以选择使用:

 ToExpression[fooRead]

在你的"表"导出/导入,如果您希望文件更易于阅读,则可能需要这样做。

为什么?

有点解释"表"行为,请注意表是一种空格分隔格式,可以包含任意字符串(不带引号)。如果你运行这个:

 Clear[a]
 ExportString[ {a, "a", 1, "1", 1 + I, "1+I",Pi,"Pi"} , "Table" ]

您会看到符号,表示整数的字符串,整数和字符串,复数和表示复数的字符串在输出中看起来完全相同。

a
a
1
1
1+I
1+I
Pi
Pi

所以当你Import这样的文件时,mathematica无法区分字符串与数字或表达式。 Import将所有内容视为字符串,但显式数字除外。我的猜测是,如果要尝试识别可能是有效表达的东西并将其视为这样,那么你会遇到许多其他问题。

如果您改为导出为" Package"引用的字符串qet

 {a, "a", 1, "1", 1 + I, "1+I", Pi, "Pi"}

这样可以导入文件而不会产生歧义..