以下是数据样本
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等。
我可以将时间分成相关范围没问题,但我不知道如何保留相关数据及其伴随时间。
一旦我能做到以上情况,我就想继续进行策划。
提前感谢任何帮助/建议:)
答案 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边,这里有一种方法histcounts
和arrayfun
-
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