【问题标题】:matlab: separating datasets in one filematlab:在一个文件中分离数据集
【发布时间】:2012-10-06 03:11:31
【问题描述】:

我有一个包含任意数量的独立数据集的数据文件;数据分为三列,包含任意数量的行,并将在 MATLAB 中进行处理。第一列包含时间值,另外两列包含相应的数据。这三个集合是串联的,每个集合不一定包含相同数量的行,时间值也不一定在同一时间开始或结束。例如,考虑以下矩阵,其中包含三个数据集,由最左列中的时间范围确定:

0.010    xxx    xxx
0.012    xxx    xxx
0.014    xxx    xxx
0.008    xxx    xxx
0.011    xxx    xxx
0.013    xxx    xxx
0.014    xxx    xxx
0.016    xxx    xxx
0.009    xxx    xxx
0.010    xxx    xxx
0.012    xxx    xxx
0.015    xxx    xxx

其中 xxx 是对本练习不重要的数据值,但它们必须与最左侧列中的相应时间值保持关联。在 MATLAB 中将每个数据集与其他数据集分开的最简单/最有效的方法是什么?也就是说,我想最终将每个集合放在一个单独的变量中:

var1
0.010    xxx    xxx
0.012    xxx    xxx
0.014    xxx    xxx

var2
0.008    xxx    xxx
0.011    xxx    xxx
0.013    xxx    xxx
0.014    xxx    xxx
0.016    xxx    xxx

var3
0.009    xxx    xxx
0.010    xxx    xxx
0.012    xxx    xxx
0.015    xxx    xxx

【问题讨论】:

标签: matlab dataset


【解决方案1】:

首先,您实际上并不需要单独的变量。您需要元胞数组,如var{1}var{2}var{3},或由变量索引var{i}

其次,在我看来,分离数据集的标准是从一行到下一行的时间步长变为负数。那准确吗?如果是这样,那么diff 会帮助你。要查找边缘值,请使用以下内容:

edges = find(diff(x(:,1)) < 0);

现在,在边缘周围添加一个for 循环,并将适当的范围直接提取到您的元胞数组中。请注意,此示例中只有两个“边”...您的第一组从一个开始并运行到第一个边。您的第二组从 edge+1 开始并运行到 edge2,最后一组从 edge2+1 开始并运行到数组的末尾。

starts = [1; edges];
stops  = [edges + 1; length(x)];

剩下的代码留给你……

【讨论】:

    【解决方案2】:

    这是我的尝试:

    %# read the data
    [a,b,c] = textread('data.txt', '%f%s%s');
    
    %# find proper indices to the groups of data
    inds = [
        1                   %# include first entry
        find(diff(a)<0)+1   %# add one because diff shrinks the array by 1
        length(a)];         %# include the last entry
    
    %# simply loop over the indices, and assign each range thus defined
    %# to an entry in a cell array
    A = cell(numel(inds)-1,1);
    B = A;
    C = A;
    for ii = 1:numel(inds)-1
        range = inds(ii) : inds(ii+1)-1;
        A{ii} = a(range);
        B{ii} = b(range);
        C{ii} = c(range);
    end
    

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 1970-01-01
      • 2014-06-17
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多