由于第一列条件,MATLAB读取矩阵

时间:2015-09-23 11:04:03

标签: matlab matrix time plot

以下是数据样本

Time    Data
0.32    1.5
0.45    0.6
0.68    2.1
0.91    0.8
1.23    1.3
1.54    1.0
1.68    2.0
1.92    2.3
1.95    0.7
1.98    1.6
2.12    1.9
2.34    0.3

我的问题是我希望能够在时间范围0-0.3和0.3-0.6之间获得所有数据,例如在其自己的nx2矩阵中。时间总是在不断增加。那么设置' n'多次增加垃圾箱以节省写作0.3,0.6,0.9,1.2等。

我可以将时间分成相关范围没问题,但我不知道如何保留相关数据及其伴随时间。

一旦我能做到以上情况,我就想继续进行策划。

提前感谢任何帮助/建议:)

2 个答案:

答案 0 :(得分:3)

假设第一列包含非递减值,则my answer to your previous question的小修改将起作用。让data表示您的输入矩阵,s是用于定义组的步骤:

data = [ 0.32    1.5
         0.45    0.6
         0.68    2.1
         0.91    0.8
         1.23    1.3
         1.54    1.0
         1.68    2.0
         1.92    2.3
         1.95    0.7
         1.98    1.6
         2.12    1.9
         2.34    0.3 ]; %// example data
s = .3; %// step to define groups

然后

result = mat2cell(data, diff([0; find(diff([floor(data(:,1)/s); NaN]))]) , size(data,2));

给出

result{1} =
    0.3200    1.5000
    0.4500    0.6000
result{2} =
    0.6800    2.1000
result{3} =
    0.9100    0.8000
result{4} =
    1.2300    1.3000
result{5} =
    1.5400    1.0000
    1.6800    2.0000
result{6} =
    1.9200    2.3000
    1.9500    0.7000
    1.9800    1.6000
result{7} =
    2.1200    1.9000
    2.3400    0.3000

请注意,如果输入中没有某个组,则只会在结果中跳过该组。例如,

data = [ 0.32    1.5
         0.45    0.6
         0.68    2.1
         2.12    1.9
         2.34    0.3 ]; %// example data
s = .3;  %// step to define groups

将产生

result{1} =
    0.3200    1.5000
    0.4500    0.6000
result{2} =
    0.6800    2.1000
result{3} =
    2.1200    1.9000
    2.3400    0.3000

答案 1 :(得分:2)

如果您想为binning输入数组行定义自定义bin边,这里有一种方法histcountsarrayfun -

bin_edges = [0.3,0.6,1,12 15]; %// Define bin edges here
[~,~,bins] = histcounts(A(:,1),bin_edges);
groups = arrayfun(@(n) A(bins==n,:),1:max(bins),'Uni',0);

示例输入,输出 -

>> A
A =
         0.32          1.5
         0.45          0.6
         0.68          2.1
         0.91          0.8
         1.23          1.3
         1.54            1
         1.68            2
         1.92          2.3
         1.95          0.7
         1.98          1.6
        12.12          1.9
        12.34          0.3
>> celldisp(groups)    %// Display cells of output
groups{1} =
         0.32          1.5
         0.45          0.6
groups{2} =
         0.68          2.1
         0.91          0.8
groups{3} =
         1.23          1.3
         1.54            1
         1.68            2
         1.92          2.3
         1.95          0.7
         1.98          1.6
groups{4} =
        12.12          1.9
        12.34          0.3