2

我已将一组 50 个文件加载到 matlab 工作区中。(从data1data50)。每一个的大小是721*176。我只想提取每个数据的前 144 行并将其存储在另一个中。

例如:

newData1 = data1(1:144,:);

我的问题是:如何使用循环一次处理所有数据来做到这一点?

4

1 回答 1

1

这取决于您如何存储数据。

在您的情况下,最好的方法是 3D 数组:

首先,分配数组(正如@HighPerformanceMark 正确指出的那样):

data = zeroes(721,176,50);

然后,用值填充它:

data(:,:,1)  =  read('firstFile.bmp');
data(:,:,2)  =  read('secondFile.bmp');
...

data(:,:,50) = ...

在这种情况下,只需使用以下选择:

data(1:144,:,:)

存储数据的另一种可能的方式是元胞数组。它很有用,因为 3D 数组无法处理不同大小的矩阵。

 data{1} = read('firstFile.bmp');
 data{2} = read('secondFile.bmp');
 ...

在这种情况下,使用cellfun

 selection = cellfun(@(x) {x(1:144,:)}, data);

如果您仍然坚持将数据存储在单独的变量中而不是数组中,则可以使用eval. 这是最不推荐的方式。

 for i=1:50
    eval(' selection{i} = data%d',i)
 end
于 2012-10-01T15:45:32.737 回答