0

我对使用 Matlab 导入数据有点陌生。基本上,我有一个 Ascii 文件。它有 13 个标题行,以及 765 列和约 3500 行数据。我正在尝试将数据导入 Matlab 中的 3500 x 765 矩阵。我尝试了以下方法:

fileID = fopen('filename');
formatspec = [repmat('%f ', [1,765])];
raw_data=textscan(fileID,formatspec, 'Headerlines',13,'delimiter','\t');

它成功地跳过了 13 个标题行。但是,它只给了我一个 1 x 765 矩阵,其中只包含第一行的数据。

也许我误解了我应该如何使用 textscan,所以在获取我的其他 ~3499 行数据方面的任何帮助都将非常感激。

~谢谢

笔记

数据文件本身的格式如下。前 13 行不包含数据本身。其后的所有行都包含类似于下面将粘贴的数据集,扩展到 700 多列和 3000 多行。

Wyko ASCII 数据文件格式 0 1 1

X 码 3571

Y 码 765

块名称类型长度值

波长 7 4 72.482628

方面 7 4 1

像素大小 7 4 0.00196

阶段 7 4 -0.048055

放大倍率 8 8 5.05

StageX 7 4 0.214484

扫描仪位置 7 4 3490.000732

扫描仪速度 7 4 3.165393

RAW_DATA 3 10927260

-10976.61035 -10977.07324 -10981.07422 -10985.6084 ...

-10967.41309 -10963.31836 -10966.75195 -10980.40723 ...

-10969.08496 -10976.03711 -10976.62988 -10964.23731 ...

-10974.12695 -10976.61133 -10979.2627 -10973.57813 ...

-10969.21094 -10966.56543 -10973.74512 -10983.41797 ...

-10970.18359 -10980.82715 -10968.00195 -10975.58594 ...

-10980.41016 -10982.39356 -10982.74316 -10974.51563 ...

-10972.31641 -10984.00488 -10987.89453 -10976.23633 ...

4

1 回答 1

0

我认为以下应该可行,但我在这台机器上没有 Matlab 来测试它。

 fileID = fopen('filename');
 formatspec = [repmat('%f ', [1,765])]; 
 raw_data = new_data = textscan(fileID,formatspec, 'Headerlines',13,'delimiter','\t');

 while ~feof(fileID)
    new_data = textscan(fileID,formatspec,'delimiter','\t');
    raw_data = [raw_data; new_data]; 
 end

 fclose(fileID);

请注意,这不是一种特别有效的方法。如果您的标题行为您提供了数组的大小,您可能希望使用零来创建一个适当大小的数组,然后将数据读入您的数组。

于 2014-06-02T23:09:41.110 回答