2017-02-20 108 views
0

我正在生成一个模型列表,模拟每分钟收集一天的数据。我想创建一些随机删除一些数据点的其他模型。有没有一种方法来实现这种行为?下面是我的代码随机删除数据点

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using MathNet.Numerics; 
    using MathNet.Numerics.Statistics; 
    public void dataGenerator() 
    { 
     int hrs = 24; 
     int minutes = 60; 
     int samplesize = hrs * minutes; // this is one day worth of data, with data created every minute 
     double mean = 50; 
     double stdev = 1; 
     int maxmodel = 10; 

     List<double[]> models = new List<double[]>(); 
     List<double> modelaverage = new List<double>(); 
     List<double> modelvariance = new List<double>(); 

     // generating normal models with different mean/deviations 
     for (int i = 1; i <= maxmodel; i++) 
     { 
      //deviations are incremented by i, to create modles of different deviations, with every model having a different center by 2*i 
      double[] model = Generate.Normal(samplesize, mean + 2*i, stdev * i); 

      models.Add(model); 
      modelaverage.Add(model.Average()); 
      modelvariance.Add(model.Variance()); 



     } 
    } 
+1

只需在0和'models.Length'之间生成一些随机索引,删除索引处的项? –

+0

你需要随机程度如何? – hoodaticus

+1

@hoodaticus说我希望每个观察都有相同的机会被删除。换句话说,每个小时*分钟(1440个观测值)有50%的机会被移除 – syang

回答

0

只需添加如下代码(我认为这是不言自明的就够了):

Random rnd = new Random(); 
int RandomRemoveCount = 10; 
for (int i = 0; i < Math.Min(models.Count, RandomRemoveCount); i++) 
{ 
    models.RemoveAt(rnd.Next(models.Count)); 
} 

,改变RandomRemoveCount你要多少值删除。 Math.Min是为了确保您不会尝试删除更多。

+0

您呈现的代码看起来好像是随机删除模型,而不是模型中的随机值(这是我想要的行为有没有办法在模型级而不是模型级上执行它? – syang

+0

那么,你不能移除数组的元素,但是如果你只是使用'List '而不是'double []'数组,你可以使用相同的代码(只需用'model'替换'models') 之后,如果需要使用数组,则可以将列表转换为数组。 – Shadowed