【问题标题】:load text data in matlab在matlab中加载文本数据
【发布时间】:2013-02-25 18:43:16
【问题描述】:

我有一些文本文件(1.txt、2.txt、...、60.txt),它们都有 5 行标题。我使用以下代码,但它无法识别标题并导入所有数据。如何说 matlab 从特定行开始导入?

num_txt=60;
input_dir='C:\data';

filenames=dir(fullfile(input_dir,'*.txt'));
i=1;
for n=1:num_txt    
    filename=fullfile(input_dir, filenames(n).name);
    img=importdata(filename);     
    data(:,i)=img(:);
    i=i+1;
end

【问题讨论】:

    标签: image matlab signal-processing


    【解决方案1】:

    IMPORTDATA 有 2 个附加参数:delimiterIn 和 headerlinesIn。

    所以你使用(假设制表符作为分隔符):

    img=importdata(filename,'\t',5);
    

    我还建议预先分配 data 矩阵。

    请注意,要使您的代码正常工作,请确保所有输入文件的大小相同。否则你会在data(:,n)=img(:); 中得到错误(是的,使用n 而不是i)。

    以上两个问题可以插入循环:

    if n==1
        data = zeros(numel(img),num_txt);
    else
        assert(numel(img)==size(data,1),'sprintf('File %s has different size', filenames(n).name))
    end
    

    【讨论】:

    • tnx,但是如何将所有数据存储在 data(:,i)=img(:);??因为它为每次导入创建一个单独的文件!我希望所有导入的数据都在一个矩阵中。
    • 在我编辑后看到您的评论。 img(:) 将单个文件中的所有数据拉伸到一个列向量中。所以你的data 矩阵假设包含所有文件。
    • 其实你需要使用索引n,而不是idata(:,n) = img(:)。而且您不需要i=i+1; 声明。您还可以将所有数据存储到 3D 数组中:data(:,:,n) = img;。相应地进行预分配。
    【解决方案2】:

    如果您了解基本知识并且不想花太多时间在如何使用 MATLAB 阅读文本上,我建议您使用找到 here 的 readtext.m。但是如果你正在学习,我建议你自己做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2014-05-11
      • 2014-03-02
      • 2013-08-01
      相关资源
      最近更新 更多