将多个制表符分隔的文件从不同的子目录导入到matlab中

时间:2013-04-02 00:26:37

标签: matlab

抱歉,我是matlab的新手。

我拥有的内容:包含大约80个子文件夹的文件夹,标记为Day01,Day02,Day03等。每个子文件夹都有一个名为“sample_ids.txt”的文件。它是一个以制表符分隔格式的n x m矩阵。

我需要的是:1个数据结构,它是一个矩阵数组,其中每个矩阵都是来自“sample_ids.txt”的数据,它应该按照Day01,Day02,Day03等的字母顺序排列。

我不知道如何从A点到B点。任何指导都会非常感激。

1 个答案:

答案 0 :(得分:0)

您可以将此问题分解为两部分:查找文件并将其读入内存。

查找文件非常简单,并且already been covered on StackOverflow

要将它们加载到内存中,您需要一个多维数组,就像创建常规数组并开始使用更多索引尺寸一样简单:A = ones(2); A(:,:,2) = ones(2);将为您提供一个三维数组的大小2乘2乘2,全都结束。

你想要什么,可能想要这样的东西:

A = [] % No prealocation. Fix for speed-up.
files = dir('./Day*/sample_ids.txt');
for file = files
    temp = load(file.name);
    A(:,:,size(A,3)+1) = temp;
end

disp(A) % display the contents of A afterards...

我没有广泛测试过这段代码,但它应该可以正常运行。

一些要点:

  1. 所有文件必须包含完全相同尺寸的矩阵 - MATLAB无法处理在不同层中具有不同尺寸的阵列(至少不使用常规阵列 - 您可以使用单元格数组,但这很快变得更加复杂......)。可以把它想象成试图用不同长度的矢量建立一个矩阵。

  2. 如果您有大量数据,而且知道多少,则可以通过预分配A来节省大量时间。这对于A = zeros(k,l,m)数据文件来说就像m一样简单每个k行和l列。如果这样做,您还必须弄清楚当前文件的索引,因此您可以将其用作赋值中的第三个索引(在循环块的第二行)。我把这作为一项互联网研究留下来了:)