【问题标题】:How to read multiple files into a single cell array?如何将多个文件读入单个单元格数组?
【发布时间】:2010-08-11 14:48:09
【问题描述】:

我有一个大型数据集,分为 5 个文件(每个文件有 15000 个属性,第一个文件包含标题(属性名称)和 9999 条记录,其他 4 个包含 10000 条记录)。

使用 textscan,我创建了 5 个必须合并的单元格数组,不知道这种方法是否合适,或者直接将所有 5 个文件读入单个单元格数组会更好。无论如何,如果你们中的任何人能够展示将多个单元格数组合并为单个单元格数组或将多个文本文件读入单个单元格数组的方法,我将不胜感激。

谢谢!

【问题讨论】:

  • 如果我正确理解您对文件的描述,每个文件都包含一个 10000×15000 的数据数组。那是对的吗?这意味着单个数组(假设它是 double 类型)将占用大约 1.2 GB。这会给你带来一些记忆问题。
  • @gnovice:很好。不过,OP 可能会在一个不错的计算服务器上运行它。

标签: matlab file-io cell-array textscan


【解决方案1】:

除非你想做一些 Java 魔法,否则你不能直接将多个文件读入一个数组。

但是,一旦你获得了元胞数组,就应该很容易将它们组合起来:假设每个元胞数组中的列数相同,你可以像这样连接它们:

finalCell = [cell1;cell2;cell3;cell4;cell5];

【讨论】:

    【解决方案2】:

    扩展 Jonas 的回答,如果内存是一个问题,您可以在阅读文件时将它们组合起来,以避免出现 5 x 15000 x 10000 + 1 15000 x 50000 单元阵列。

    finalCell = textscan(fid_1,'format');

    finalCell = [finalCell; textscan(fid_2,'format')];

    finalCell = [finalCell; textscan(fid_3,'format')];

    finalCell = [finalCell; textscan(fid_4,'format')];

    finalCell = [finalCell; textscan(fid_5,'format')];

    最好的问候,

    亚当

    【讨论】:

    • 此代码返回一个大小为 5 x 15000 的单元格数组。我想要的是一个大小为 50000 x 15000 的单元格数组。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多