Mathematica导入问题

时间:2014-09-26 16:50:01

标签: import export wolfram-mathematica

我从Mathematica中导出了矩阵

Export["all.txt", all]

即。 矩阵是s.t

{{1,2,3,4},{1,2,3,4}}

我试图将其导回,但它无法使用..

Import["text.txt"]

{1, 2, 3}
{1, 2, 3}

Import["text.txt", "Data"]
{{"{1,", "2,", "3}"}, {"{1,", "2,", "3}"}}

Import["text.txt", "String"]
{1, 2, 3}

{1, 2, 3}

我不能使用它,因为它不是矩阵。如何将其作为矩阵导入?所以我可以做一些像%[[1]][[1]]这样的命令来获取行和列

2 个答案:

答案 0 :(得分:0)

我很久以前就注意到了(自第6版以来),Mathematica对* .txt文件存在一些问题。使用后缀.dat。对于我来说,矩阵或任何东西都证明了这一点。

答案 1 :(得分:0)

文件扩展名.txt没有错误,但是当Mathematica导出并导入文本文件时,它假定它是一个字符串。你可以看到:

Export["C:\\test.txt", {{1, 2, 3}, {4, 5, 6}}]
Head[Import["C:\\test.txt"]]
(* Output: String *)

相反,您可以像Eugene建议的那样更改文件扩展名:

Export["C:\\test.dat", {{1, 2, 3}, {4, 5, 6}}]
Head[Import["C:\\test.dat"]]
(* Output: List *)

请注意,它甚至不会使用它不理解的文件扩展名:

Export["C:\\test.xyz", {{1, 2, 3}, {4, 5, 6}}]
Head[Import["C:\\test.xyz"]]
(* Output: Export::type: "List cannot be exported to the "XYZ" format." *)

真的,发生了什么ImportExport正在尝试从文件扩展名推断出您要使用的类型。您始终可以手动指定该类型:

Export["C:\\test.txt", {{1, 2, 3}, {4, 5, 6}},"List"]
Head[Import["C:\\test.txt"]]
(* Output: String *)

类型"List"和类型"String"的输出文件将是相同的,因此您还需要在导入文件时指定它:

Export["C:\\test.txt", {{1, 2, 3}, {4, 5, 6}},"List"]
Head[Import["C:\\test.txt","List"]]
(* Output: List *)

请注意,即使您忘记Export指定类型为"List",这也会有效,因为输出文件仍然可兼容导入列表。

最糟糕的情况是,您可以随时尝试:

Export["C:\\test.txt", {{1, 2, 3}, {4, 5, 6}}]
ToExpression[Import["C:\\test.txt"]]
(* Output: {4,5,6} *)

这不太有用,只能给你排在最后一行。你必须有点迂腐:

Export["C:\\test.txt", {{1, 2, 3}, {4, 5, 6}}]
ToExpression[StringSplit[Import["C:\\test.txt"], "\n"]]

但是在所有这些可能性中,我提到的最好和最简单的方法是简单地告诉Import命令你所拥有的是一个列表:

Import["C:\\test.txt","List"]

这就是为什么Import首先存在可选参数的原因。它是可选的原因是我们可以懒惰,让Mathematica决定.txt文件是字符串而.dat文件是列表,但是如果你不希望Mathematica这样做(即Mathematica做错了),你只需指定"List"或您要导入的任何类型的文件。

你几乎做对了,但是你使用了"Data"类型,这实际上意味着(来自文档):

  

“通用Wolfram语言表单中的数据(列表,字符串等)”

这意味着你不会得到太多帮助--Mathematica仍将决定这是一个字符串。您想要的类型是"List"