在Matlab中,从一个有间隙的数据集中创建多个无间隙矩阵(或结构)

在Matlab中,从一个有间隙的数据集中创建多个无间隙矩阵(或结构),matlab,matrix,vector,gaps-in-data,Matlab,Matrix,Vector,Gaps In Data,我有一些时间序列中的空白数据。找到了缺口的指数以及长度和所有内容。问题是我想把我的数据(列:时间和测量值)分割成几个矩阵/向量,或者分割成一个结构。我的计划是对这些小时间序列进行傅里叶变换,以便进一步比较 让我们尝试在示例中解释: Tdat是时间序列,有3825个点 % find number of gaps nogap = diff(Tdat(find(diff(Tdat)>0.051))); %20Hz measurement numgaps = length(

我有一些时间序列中的空白数据。找到了缺口的指数以及长度和所有内容。问题是我想把我的数据(列:时间和测量值)分割成几个矩阵/向量,或者分割成一个结构。我的计划是对这些小时间序列进行傅里叶变换,以便进一步比较

让我们尝试在示例中解释: Tdat是时间序列,有3825个点

    % find number of gaps
    nogap = diff(Tdat(find(diff(Tdat)>0.051))); %20Hz measurement
    numgaps = length(nogap) %number of gaps = bumgaps+1
此处的间隙数为8

    %indexing the gaps
    w = find(diff(Tdat)>0.51); %finding the gaps %0.051 since 1/20=0.05


    u = find(diff(Tdat)<0.51); %finding indices with data
    series = length(M)-length(u) %amount of data series without gaps
这些间隙之间的点数为425

因此,我希望有9个不同的矩阵/向量,每个长度425,只有数据,没有时间间隔


有没有什么办法,或者我搜索得不够好,没有找到答案?

从您的示例中我可以看到,这些差距似乎不是您要删除的数据点,而是划分数据的地方?我说得对吗?由于生成的数据向量长度相同,您可能希望
重塑()?如
重塑(Tdat,425,9)

下面是一个小例子:

>> a = [1:12]'

a =

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12

>> b = reshape(a,4,3)

b =

     1     5     9
     2     6    10
     3     7    11
     4     8    12
如果要将数据作为单元格,也可以在以后使用
mat2cell()

>> c = mat2cell(b,4,ones(1,3))

c = 

    [4x1 double]    [4x1 double]    [4x1 double]

>> c{2}

ans =

     5
     6
     7
     8

从您的示例中我可以看到,似乎差距不是要删除的数据点,而是划分数据的位置?我说得对吗?由于生成的数据向量长度相同,您可能希望
重塑()?如
重塑(Tdat,425,9)

下面是一个小例子:

>> a = [1:12]'

a =

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12

>> b = reshape(a,4,3)

b =

     1     5     9
     2     6    10
     3     7    11
     4     8    12
如果要将数据作为单元格,也可以在以后使用
mat2cell()

>> c = mat2cell(b,4,ones(1,3))

c = 

    [4x1 double]    [4x1 double]    [4x1 double]

>> c{2}

ans =

     5
     6
     7
     8

我找到了另一个答案,结果证明它更有用。 以防有人感兴趣

由于并非所有部分(没有间隙)的长度都相等,因此很难跟踪用零填充某些列所需的所有索引

因为我知道所有的空白从哪里开始,所以我可以使用一个新的索引将它们放入结构中

gl = find(diff(Tdat)>0.051);

gaps = length(gl)-1;

for a = 1:gaps;
    Meas(a).M       = M( gl(a)+1 : gl(a+1) );
end

其中Tdat是我的时间向量,M是数据向量。

我找到了另一个答案,最终证明它更有用。 以防有人感兴趣

由于并非所有部分(没有间隙)的长度都相等,因此很难跟踪用零填充某些列所需的所有索引

因为我知道所有的空白从哪里开始,所以我可以使用一个新的索引将它们放入结构中

gl = find(diff(Tdat)>0.051);

gaps = length(gl)-1;

for a = 1:gaps;
    Meas(a).M       = M( gl(a)+1 : gl(a+1) );
end

其中Tdat是我的时间向量,M是数据向量。

你能提供小示例数据和相应的输出吗?Well Ii有一个3列的结构:时间-电压-电流。我把时间和电流放在向量中进行处理。所以我可能更愿意为时间和当前时间9创建新的向量。时间在1970年1月1日00:00:00之后仍以秒为单位。但这不重要。对于这一个,数据范围从10^(-9)到10^(-6)。时代更大;)你能提供小的示例数据和相应的输出吗?Well Ii有一个3列的结构:时间-电压-电流。我把时间和电流放在向量中进行处理。所以我可能更愿意为时间和当前时间9创建新的向量。时间在1970年1月1日00:00:00之后仍以秒为单位。但这不重要。对于这一个,数据范围从10^(-9)到10^(-6)。时代更大;)是的,这似乎是一个很好的解决方案。。然后我就可以知道要使用哪些列了。。我将直接尝试:)我有一个新问题,因为我的数据不总是可重塑的(错误的元素数量来适应此..)“使用重塑来重塑元素数量的错误不能更改。”我猜这是因为我的第一个或最后一个数据集比其他数据集小。。有没有办法解决这个问题S@IceQueeny一个简单的解决方案是用零填充,以获得长度相等的信号。您还可以尝试创建一个
groupingVariable
(可能在差距指数上使用
cumsum()
,如
grpVar=cumsum(w)
)。然后使用
Tdat(grpVar==1)、Tdat(grpVar==2),…
来区分不同的数据集。是的,这似乎是一个很好的解决方案。。然后我就可以知道要使用哪些列了。。我将直接尝试:)我有一个新问题,因为我的数据不总是可重塑的(错误的元素数量来适应此..)“使用重塑来重塑元素数量的错误不能更改。”我猜这是因为我的第一个或最后一个数据集比其他数据集小。。有没有办法解决这个问题S@IceQueeny一个简单的解决方案是用零填充,以获得长度相等的信号。您还可以尝试创建一个
groupingVariable
(可能在差距指数上使用
cumsum()
,如
grpVar=cumsum(w)
)。然后使用
Tdat(grpVar==1)、Tdat(grpVar==2),…
来区分不同的数据集。