0

对不起,我是 matlab 新手。

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

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

我不知道如何从 A 点到 B 点。任何指导将不胜感激。

4

1 回答 1

0

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

查找文件非常容易,并且已经在 StackOverflow 上进行了介绍

要将它们加载到内存中,您需要一个多维数组,这就像创建一个常规数组并开始使用更多索引维度一样简单:A = ones(2); A(:,:,2) = ones(2);例如,将为您提供一个大小为 2×2×的 3 维数组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列一样简单。如果这样做,您还必须找出当前文件的索引,因此您可以将其用作分配中的第三个索引(在循环块的第二行)。我把它作为一个互联网研究 excersize :)

于 2013-04-02T00:56:06.553 回答