如果这是一个愚蠢的问题,我道歉,但这让我发狂。我在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)
答案 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"}
这样可以导入文件而不会产生歧义..