6

我有必须从另一个程序导入到 Mathematica 的数据(点),所以我可以绘制它。我可以控制如何将这些点写入文件,所以我可以以任何我想要的方式放置它们。将它们导入 Mathematica 的最佳方法是什么?因为我将使用 StreamDensityPlot,所以我必须传递给 StreamDensityPlot 的变量必须采用以下方式:

data = {
        {
            { a, b, c }, {a, b, c}, {a, b, c},
            { a, b, c }, {a, b, c}, {a, b, c},
            { a, b, c }, {a, b, c}, {a, b, c},
        }
    ...
        {
            { a, b, c }, {a, b, c}, {a, b, c},
            { a, b, c }, {a, b, c}, {a, b, c},
            { a, b, c }, {a, b, c}, {a, b, c},
        }
    }

您如何建议我将数据放入中间文本文件中?我应该用什么来导入它?我试过 Import["mytext.txt", "List"],让我的文本文件包含上面显示的形式,但似乎 Mathematica 将这些点视为字符串,我无法对它们做任何事情。有没有办法像其他语言一样将字符串转换为任意数据(只要它们在新数据类型中有效)?

回顾:

  1. 是否可以在 Mathematica 中将字符串(例如“5”)转换为数字?如果是,如何?
  2. 是否可以将像 "{1 , 2, 3}" 这样的字符串转换为 Mathematica 中的列表?如果是,如何?
  3. 是否可以将 CSV 文件作为列表列表加载,如 Mathematica 中所示?

谢谢

4

2 回答 2

10

使用ToExpression将字符串转换为表达式。如果您有一个纯文本文件 foo.txt,其格式与您的示例中一样,那么只需使用Get将其导入 Mathematica ,<< /path/to/foo.txt;即将以您想要的方式导入和评估data,无需将文本转换为表达式。

于 2009-12-22T09:53:20.413 回答
5

尝试像这样格式化您的数据文件:

A, B, C, A, B, C, A, B, C
A, B, C, A, B, C, A, B, C
A, B, C, A, B, C, A, B, C
...

所以你可以使用 Mathematica 的 CSV 导入。然后在导入后将每一行划分为一个点列表。

Partition[#, 3]& /@ Import["file.csv", "CSV"]

另外,请记住,Mathematica 的科学记数法与 C(或您用于编写数据文件的任何语言)不同。

于 2009-12-22T14:01:05.870 回答