【问题标题】:Create a matrix from multiple input files in C++ or Python在 C++ 或 Python 中从多个输入文件创建矩阵
【发布时间】:2012-03-02 22:05:30
【问题描述】:

我们有一个荧光光谱仪,它以一种不舒服/愚蠢的方式输出其荧光数据以供进一步处理。即实际数据开始前有55行cmets和信息。然后第 55 行从第 1 列中的发射波长和第 2 列中的荧光值开始,由制表符限制器分隔。在 cmets 中,第 22 行还有激发波长。文件看起来像这样(行号不是文件的一部分。我只是为了清楚起见添加了它们):

Line 1   Stefan
Line 2   Date: 23.1.2012
Line 3   WS_40#01.SP
Line 4   ...
Line 22  240
Line 23  ...   
Line 55  300.000000 62.237799  
Line 56  300.500000 59.904189  
Line 57  301.000000 58.901731  
Line 58  ...
Line 656 600.5      23.900000  

每个激发波长有一个文件,一个样品总共有 44 个文件(激发从 240 到 455 nm,步长为 5 nm)。 44 个光谱的通用文件名存储在一个名为“filename.txt”的文件中。这 44 个文件以数字命名,例如 FILENAME#01.sp, FILENAME#02.sp,..., FILENAME#44.sp

目标: 我想从这 44 个文件中创建一个矩阵,如下所示(理想情况下,激发波长取自第 22 行,但列名也可以手动创建,因为它们始终相同):

         240   245   250  ...    455 
300.0  62.23  34.4   ...  ...   23.5
300.5  59.90  23.7   ...  ...   19.5
301.0  58.90  23.7   ...  ...   34.8
...      ...   ...   ...  ...
600.5  23.90   ...   ...  ...

最后,矩阵应该存储在一个名为 filename.csv 的文件中

这如何使用 C++ 或 Python 实现?

问题是我已经在 R 中为此编写了一个解决方案。但是我们希望为此提供一个 .exe 文件,以便实验室技术人员可以在不熟悉 R 的情况下完成这项任务。这真的很有帮助我们的实验室可以完成重要的事情。

不幸的是,我没有任何好的 python 或 c++ 代码可以开始。

如果问题不清楚,请告诉我。在这种情况下,我将添加一些信息或改写问题。

非常感谢任何直接帮助或与其他网站/帖子的链接。

【问题讨论】:

    标签: c++ python matrix


    【解决方案1】:

    在 C++ 中,您可以使用标准模板库从文本文件中读取和写入 std::strings。例如:

    ifstream filenames ("filename.txt", ifstream::in);
    

    这会创建一个从“filename.txt”文件中读取的对象。您可以通过执行以下操作从文件中获取每一行:

    while (!filenames.eof ())
    {
        std::string nextFile;
        filenames.getline (nextFile); // Note, you may have to #include <string> here
        // Do something with nextFile here, like open it and read from it, or put it in an array.
    }
    

    当你读完文件时:

    filenames.close ();
    

    您可以使用相同的技术从 44 个文件中的每个文件中读取每一行。

    【讨论】:

      【解决方案2】:

      对于以类似于 R 方式的日常数据分析,您可以使用Pandas Python 库。

      要将 Python 脚本转换为 .exe 文件,您可以使用 py2exe。

      为了简化可执行文件的创建,您可以仅使用 Python 标准库 example 编写脚本。

      【讨论】:

      • 非常感谢您的帮助、代码和有用的链接。特别感谢为此任务编写 python 代码的 J.F. Sebastian。不幸的是,代码卡在第 40 行并显示以下错误消息:ValueError: could not convert string to float:。在这里您可以下载一些示例文件:file#1 和 file#2 和 filename.txt。再次感谢您的时间和帮助。对此,我真的非常感激。斯特凡
      • @Strohmi:末尾有空行。在填充fluorescenes 字典、example 时应跳过它们。如果您自己无法进行此类更改,请从 tutorial 开始。
      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多