比较两个不同大小的数组
5次浏览(过去30天)
显示旧的注释
好吧,我认输了。我有两个不同的数组,它们以时间为索引。两个数组的每个元素都有两个时间索引:开始时间和停止时间(在下表图像中分隔每个单元格的条形图)。这些数组的大小不一定相同,我也不能假设在它们的时间内会有任何匹配(因此我不能依赖于
相交
).因为我的结果需要时间同步,我不能依赖
最佳匹配
,要么。下面是关于我需要使用(Array1和Array2)的最坏情况的表示,以及我想要以(Array1New和Array2New)结束:
灰色的单元格表示现实世界的时间跨度,在各自的数组中没有数据,也没有任何条目。所以Array1在Array2之后开始和结束,Array1没有元素4和元素5之间的时间跨度。如。
Array1 {1,} = {data11}{[16 - 2月- 2022 08:17:29]}{[16 - 2月- 2022 08:27:12]}
Array2 {1,} = {data21}{[16 - 2月- 2022 08:00:33]}{[16 - 2月- 2022 08:20:18]}
Array1 {4:} = {data24}{[16 - 2月- 2022 10:23:38]}{[16 - 2月- 2022 10:37:56]}
Array1 {5:} = {data24}{[16 - 2月- 2022 10:52:31]}{[16 - 2月- 2022 11:06:15]}
我需要重新格式化Array1和Array2以匹配Array1New和Array2 new,或者在执行使用数组作为输入的元素的操作时,找到某种方法来调用Array1和Array2的所需部分。换句话说,因为这对其他人来说似乎很困惑:
选择一个)
重新格式化Array1和Array2,使它们涵盖相同的现实时间框架,具有相同的时间戳和相同数量的元素。不映射回旧元素的新元素(例如Array1New(1,1))应该用预先确定的填充数据填充,而映射的元素应该复制数据(例如Array1New(2,1)=Array1(1,1))。
选项B)
有一些语法或允许我实现选项A的净结果,而不重新塑造Array1和Array2(如果这样会更快/更好)。
到目前为止,我有以下代码,注意我的实际数据输入是结构数组,因此使用了特定的大括号。
...
TimeIdcs1 = [Record1.StartTime;Record1.StopTime]'
TimeIdcs2 = [Record2.StartTime;Record2.StopTime]'
将时间戳合并为单个向量,删除重复项并排序
时间记录=独特(vertcat (TimeIdcs1 TimeIdcs2));
使用circshift创建单个组合时间戳数组
时间记录(:,2)= circshift(时间记录,1);
时间记录(,)= [];
创建Array1New和Array2New
TimeRkrdLength = length(TimeRecord);
Array1New = cell(OvrLpRkrdLength,3);
Array2New = cell(OvrLpRkrdLength,3);
为我= 1:TimeRkrdLength
Array1New{我2}=时间记录(我,1);
Array1New{我3}=时间记录(我,2);
Array1New{我2}=时间记录(我,1);
Array1New{我3}=时间记录(我,2);
结束
如果可能的话,使用intersect定义记录映射
[~,Array1Start,TimeRecordStart] = intersect(TimeIdcs1(:,1),TimeRecord(:,1));
[~,~,TimeRecordStop] = intersect(TimeIdcs1(:,2),TimeRecord(:,2));
为i = 1:长度(TimeRecordStart)
Array1New {TimeRecordStart(我):TimeRecordStop(我),我}= Array1 (Array1Start(我))
不太确定该怎么做,因为似乎没有办法。
%来阻止将一组值分配给单元格数组的整个列
结束