matlab:将数据集分离到一个文件中

时间:2012-10-05 18:45:03

标签: matlab dataset

我有一个包含任意数量的独立数据集的数据文件;数据分为三列,包含任意数量的行,并将在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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

我为你留下剩下的代码......

答案 1 :(得分:0)

这是我的理由:

%# 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