2017-02-20 110 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