【问题标题】:Count up variable/table name with while loop用while循环计算变量/表名
【发布时间】:2022-01-07 04:04:21
【问题描述】:

我正在读取具有相同测量变量的多个表。我想将表格的变量相互比较。因为有这么多的表,每一个我都在做同样的事情,我想用一个while循环来自动化这个过程。但我不知道如何用k 替换1(在变量和表中)。

data_1 = readtable('file_xy')
data_2 = readtable('file_zy')
data_3 = readtable('file_zz')
...

k=1

while k < 50
 Temp_1 = mean([data_1.tempx(:), data_1.tempz(:)], 2)
 p_1 = mean([data_1.px(:), data_1.pz(:)], 2)
 k = k+1
end

如何自动读取和处理我的所有表格?

【问题讨论】:

    标签: matlab loops while-loop matlab-table


    【解决方案1】:

    您已经注意到,在大多数情况下,复制代码行数十(更不用说数百或数千)次来做同样的事情可以(而且应该!)自动化。您正在做的是创建动态变量名称which is bad, very bad,更不用说要求您复制粘贴同一行代码 50 次。相反,使用一个简单的循环读取所有文件。

    还有其他几个较小的改进点,我将在下面的代码块中概述它们。

    % First, select the directory where your files are
    input_dir = "C:\path\to\your\folder";
    % Read the entire directory, searching for files of your type
    % change .txt to whatever file type you have.
    file_list = dir([input_dir '\*.txt']);
    
    % ROWS comes from the amount of rows in your table files
    % Pre-allocate output arrays for memory efficiency
    Temp = zeros(ROWS, numel(file_list));
    p = zeros(ROWS, numel(file_list));
    
    % Use a for loop, since you know how many elements there are
    for idx = 1:numel(file_list)
        % Read the files in order
        tmp_data = readtable([input_dir file_list(idx).name)]);
        Temp(:,idx) = mean([tmp_data .tempx(:), tmp_data .tempz(:)], 2)
        p(idx,:) = mean([tmp_data .px(:), tmp_data .pz(:)], 2)
    end
    

    Tempp 现在都是矩阵,您的原始 Temp_1Temp(:,1) 中,p_1p(:,1) 等中。这假设 Tempp 是行,根据mean 中的维度参数。

    您可能不得不考虑维度,因为我不知道您的数据大小。但总的来说,这应该为您提供一个很好的起点,让您了解如何使用预分配来读取多个文件并有效地存储它们。
    请注意,虽然您可以使用while 循环,但鉴于您有固定的迭代次数,即文件数,没有太多需要。如果迭代次数不固定,我只会使用while 循环,例如在优化问题中,代码会根据达到某个条件而停止。

    最后:MATLAB 有 great documentation 包括很多示例。如果您不了解某个功能,请前往那里作为第一个访问点。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2017-07-23
      • 2022-07-07
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多