比较两个不同大小的数组

5次浏览(过去30天)
加布里埃尔·斯坦利
加布里埃尔·斯坦利 2022年2月16日
编辑: 默罕默德·萨米 2022年2月23日
好吧,我认输了。我有两个不同的数组,它们以时间为索引。两个数组的每个元素都有两个时间索引:开始时间和停止时间(在下表图像中分隔每个单元格的条形图)。这些数组的大小不一定相同,我也不能假设在它们的时间内会有任何匹配(因此我不能依赖于 相交 ).因为我的结果需要时间同步,我不能依赖 最佳匹配 ,要么。下面是关于我需要使用(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(我))
不太确定该怎么做,因为似乎没有办法。
%来阻止将一组值分配给单元格数组的整个列
结束
8的评论
加布里埃尔·斯坦利
加布里埃尔·斯坦利 2022年2月22日
我编辑了原始的问题,试图提高清晰度,通过“比较”,我的意思是对覆盖给定的现实世界时间跨度的数据执行任何操作/函数。注意,我提供的所有示例都是手动创建的。两个数组中的元素数量、两个数组的准确时间戳、两个数组中覆盖的总时间等都可能不同。我只确信两个数组将覆盖大致相同的时间(即它们将覆盖大致相同的08:00-08:30的半小时,17:13-19:17的两个小时,等等)。

登录评论。

答案(1)

默罕默德·萨米
默罕默德·萨米 2022年2月23日
编辑:默罕默德·萨米 2022年2月23日
完成您所要求的任务的最佳方法是将数组转换为时间表,然后使用同步函数或Live Script synchronize时间表任务来组合这些时间表。您可以在这里的文档中找到更多详细信息。随着时间的推移,函数可能会发生变化,您可以参考您的Matlab版本的文档。
一些例子

标签

下载188bet金宝搏


释放

R2019b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!