-1

我有一个具有多个时间段的模型,并且我收到了一些具有时间维度的元组集格式的数据。因此,原始元组集是每个时间段所需的元组集的超集。我还有一个表示时间段的整数数组。在预处理中,我需要对这些数据进行迭代并分别分析每个时间段。我相信我可以通过将原始元组拆分为基于时间段的子集来显着减少预处理时间,然后在预处理期间独立地迭代每一个。

在 .dat 文件中:

timeSet = {1 2};
dataset = {
//<attribute1, attribut2, timePeriod>
<a,b,1>
<a,c,1>
<a,b,2>
<a,b,2>
};

在模组文件中:

{int} timeSet = ...;
tuple data {string attribOne; string attribTwo; int time;};
{data} dataset = ...;

我不知道会有多少时间段,所以如果我不能即时拆分元组,那么我需要做这样的事情:

execute{
   for(var t in timeSet) {
      for(var r in dataSet) {
         if(r.Time == t) {
            //call a function that executes on r
         }
      }
   }
}

但是,我想避免使用上面的代码,因为它需要在 timeSet 中对整个数据集进行迭代。如果我可以根据时间字段的值将 dataSet 拆分为多个元组或数组,那么我可以将上面的内容替换为以下内容:

 execute{
   for(var t in timeSet) {
      for(var r in dataSetsCollection[t]) {
         //call a function that executes on r
      }
   }
}

是否可以从上面的代码中创建诸如 dataSetsCollection 之类的项目?我试图用一个元组这样做:

tuple TdataSetsCollection {data row;};
{TdataSetsCollection} dataSetsCollection = {<ds> | ds in dataset : ds.Time = t};

并带有一个数组:

tuple TdataSetsCollection {data row;};
TdataSetsCollection DataSetsArr[t in TimeSet] = [t : ds | ds in datasets, t in TimeSet : ds.Time == t];

以上都不起作用,所以我目前被卡住了。

我已经交叉发布了这个问题

4

1 回答 1

3

您可以使用切片:

.mod

{int} timeSet = ...;
tuple data {string attribOne; string attribTwo; int time;};
{data} dataset = ...;

{int} computedTimeSet={d.time | d in dataset};
{data} dataSetPerTime[t in computedTimeSet]={d | d in dataset : d.time==t};

execute
{
  writeln(dataSetPerTime);
}

.dat

timeSet = {1 2};
dataset = {

<a,b,1>
<a,c,1>
<a,b,2>
<a,d,2>
};

 [{<"a" "b" 1> <"a" "c" 1>} {<"a" "b" 2> <"a" "d" 2>}]
于 2020-03-02T17:41:49.767 回答