2014-09-26 43 views
0

我已出口矩阵从数学数学进口问题

Export["all.txt", all]

即 Matrix是ST

{{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} 

我cannnot使用它,因为它不是矩阵。我如何将它作为矩阵导回?所以我可以得到一些命令,如%[[1]][[1]]获得行和列

+0

尝试“表”作为“导入”的第二个参数: – Alan 2014-09-26 18:17:31

+0

尝试“.m”(或甚至“.mx”,如果只有mathematica需要读取它) – agentp 2014-09-26 18:21:51

回答

0

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

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

相反,尤金建议你可以改变文件扩展名:

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 *) 

请注意,即使您忘记指定"List"类型的Export,也能正常工作,因为输出文件仍然可以作为列表导入兼容。

最坏的情况下,你总是可以试试这个:

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"

+0

是的!它的作品我真的很感激你! – 2014-10-02 17:42:59

0

我注意到很久以前(自第六版本)Mathematica有* .txt文件的一些问题。使用后缀.dat。对于矩阵或任何其他事物,我已经证明了这一点。