我从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]]
这样的命令来获取行和列
答案 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." *)
真的,发生了什么Import
和Export
正在尝试从文件扩展名推断出您要使用的类型。您始终可以手动指定该类型:
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"
。