matlab怎么重新打开新的代码,在Matlab中附加新数据的有效方法(带示例代码)

我正在寻找方法,内置函数,良好实践……将新数据附加到矩阵 – 当行和列不相同时

我处理的数据结构如下:

A.values: Ta x Ma matrix of values

A.dates: Ta x 1 vector of datenum

A.id: 1 x Ma cell array of ids

现在面临的挑战是如何处理我加载的新(可能重叠)数据B并希望附加到新矩阵C:

当新数据进入时,它可以水平和垂直扩展,原因如下:

>新ids

>新约会

它还可以具有在min(A.dates)之前或max(A.dates)之后或min(A.dates)和max(A.dates)之间开始的日期. ID在B(全新)中可以是唯一的,或者某些可以重叠.

这是一个例子:

A.values = [2.1 2.4 2.5 2.6; ...

4.1 4.4 4.5 4.6; ...

6.1 6.4 6.5 6.6];

A.dates = [730002; ...

730004; ...

730006];

A.id = {'x1', 'x4', 'x5', 'x6'};

现在有新数据出现:

B.values = [1.2 1.9 1.5 1.6 1.7; ...

3.2 3.9 3.5 3.6 3.7; ...

7.2 7.9 7.5 7.6 7.7; ...

8.2 8.9 8.5 8.6 8.7];

B.dates = [730001; ...

730003; ...

730007; ...

730008];

B.id = {'x2', 'x9', 'x5', 'x6', 'x7'};

我们现在如何高效快速地构建新的struct C?

C.values = [NaN 1.2 NaN 1.5 1.6 1.7 1.9; ...

2.1 NaN 2.4 2.5 2.6 NaN NaN; ...

NaN 3.2 NaN 3.5 3.6 3.7 3.9; ...

4.1 NaN 4.4 4.5 4.6 NaN NaN; ...

6.1 NaN 6.4 6.5 6.6 NaN NaN; ...

NaN 7.2 NaN 7.5 7.6 7.7 7.9; ...

NaN 8.2 NaN 8.5 8.6 8.7 8.9];

C.dates = [730001; ...

730002; ...

730003; ...

730004; ...

730006; ...

730007; ...

730008];

C.id = {'x1', 'x2', 'x4', 'x5', 'x6', 'x7', 'x9'};

更新时间表

在评论之后,我试图通过以下时间表实现这一目标:

function dfmerged = in_mergeCache(dfA, dfB)

dtA = datenum2datetime(dfA.dates); % function datenum2datetime can be found here: https://stackoverflow.com/a/46685634/4262057

dtB = datenum2datetime(dfB.dates);

TTa = array2timetable(dfA.values, 'RowTimes', dtA, 'VariableNames', dfA.id);

TTb = array2timetable(dfB.values, 'RowTimes', dtB, 'VariableNames', dfB.id);

TTs = synchronize(TTa,TTb);

dfmerged.id = TTs.Properties.VariableNames;

dfmerged.values = table2array(TTs);

dfmerged.dates = datenum(TTs.Time); %to convert datenum

end

问题:然而,这给了我一个很大的时间表,其中行确实同步,但列只是重复(9列).我怎样才能同步列?

C =

struct with fields:

id: {'x1' 'x4' 'x5_TTa' 'x6_TTa' 'x2' 'x9' 'x5_TTb' 'x6_TTb' 'x7'}

values: [7×9 double]

dates: [7×1 double]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值