2016-04-25 76 views
0

我有一个大小为11490x1的数据集。每0.25秒记录一次数据(即4hz)。所以,1秒就占了4个数据点。这里的目标是每3秒进一步创建子集,这意味着我想每3秒查看一次数据并分析它。例如:如果我有[1 2 3 4 5 6 8 2 4 2 4 3 2 4 2 5 2 5 24 2 5 1 5 1]等数据,我希望有一个子集[1 2 3 4 5 6 8 2 4 2 4 3]等等...将数据集划分为大小为n的分箱matlab

任何帮助将不胜感激。

+1

我认为你正在寻找'reshape'命令,它将允许你将你的向量重塑成矩阵(记住用零填充你的向量或截断以确保该矩阵将适合)。 – GameOfThrows

+0

我试图重塑,它给出了一个错误,说数据不应该有小数,我使用的数据有点像0.2,0.1等等 – DashD

+0

重塑做小数,也许你没有填充你的载体?看看丹的回答,他已涵盖:D – GameOfThrows

回答

2

这实际上取决于你打算如何“分析”你的数据。最简单的方法是使用一个循环:

n = 4*3; 
breaks = 0:n:numel(data) 
for i = 1:numel(breaks)-1 
    sub = data(breaks(i)+1:breaks(i+1)); 
    %// do analysis 
    %// OR sub{i} = data(breaks(i)+1:breaks(i+1)); 
end 

一个量化的方法可以使用reshape(data,[],12)填充data后使mod(numel(data),12)==0

的第三种方式可能会打破你的矩阵成使用mat2cell或在单元阵列一个for循环像上面,而不是sub=...宁愿使用sub{i}=...

+0

是否有一个原因输出小尺寸为1x13?当我试图使用索引为子它运行在一个错误。我在for循环中使用了sub(1,i) – DashD

+0

编辑过的版本给出了正确的索引,现在,代码覆盖了sub的每个值,每次如何保存输出'sub'? – DashD

+0

如前所述,使用'sub {i} = ...'或使用'reshape'而不是循环。注意我再次编辑循环,以便你可以调用'sub {i} = ...'而不是'sub {i-1} = ...' – Dan