【问题标题】:Creating random data C#创建随机数据 C#
【发布时间】:2015-10-12 11:22:34
【问题描述】:

我正在尝试创建一个心跳监测器,需要一些虚假信息来输入我的程序以检查它是否有效。

我的程序的一个要求是,如果心率整数低于某个数字,则发出警报。

但是我遇到的问题是,如果心率在触发警报之前下降到最低心率整数以下,然后又直接反弹回来,那不是对警报的测试,请参阅伪代码:

If heart_rate < 60:
    Count = Count + 1
If heart _rate > 60:
     Reset Count variable 
If Count = 10:
     Set off alarm

所以我需要生成模拟心率降至 60 以下(患者死亡)的数据。 最快的方法是创建一个列表或文本文件,程序从中读取以模拟情况,或者是否有一种时髦的方法可以模拟可以触发警报的随机数,一旦警报响起,它将保持在该整数附近出发?

对不起,如果这听起来很混乱,我是一名 python 程序员,必须用 C# 编程。

【问题讨论】:

  • 你会如何在 python 中做到这一点?
  • 我可能会让程序将随机数抽取到变量中,并让它检查该数字是否为 60 或更少。当它是 60 或更少时,我将有第二个随机数生成器在同一个变量中创建 50 到 60 之间的数字,以将 HR 保持在 60 以下。看起来超级冗长。
  • 您是想模拟心跳还是想结合触发警报的逻辑?
  • 尝试模拟心跳,模拟某人的心率降至 60 以下并保持在那里至少 10 次心跳,这将触发警报。

标签: c# random numbers


【解决方案1】:

您的问题似乎是“数据流测试”问题。手动生成数据流并不是我个人认为的“快速”(甚至“理智”......)。您要么获取现有数据集,要么生成它(但不是手动生成,除非它是相对少量的数据点:20~30)。

话虽如此,您需要测试一些东西,这意味着您需要知道当目标案例(心率低于 60)时,您的系统会正确捕获“异常”。反过来,这意味着您需要知道它发生在哪里,即确切的时间点。

我的建议是:自动生成一个充满“正常”值的数据集。在不同的时间点(即数据流中的位置)以不同的频率手动插入“异常”值 (59),以查看系统是否重置计数器(发生次数少于 10 次)或是否发出警报(至少 10发生)。

然后您将拥有以下初始数据流:

  80 78 78 81 80 81 ... 75 76 80 // say 100 values ("data points")
// 0  1  2  3  4  5     97 98 99 -> indices ("time points")

例如,如果您在索引 2 处插入“错误警报”(80 78 59 59 78),您就知道您的系统应该重置counter。你会为“警报”做同样的事情;您将知道应该发出警报的索引(时间点)。

编辑:关于“手动”插入目标值的部分应解释为“根据经验选择填充随机数据的数组(或列表)的索引,数据应插入的位置”。

【讨论】:

    【解决方案2】:
    public static class HeartrateGenerator
    {
        static Random random = new Random();
    
        public static IEnumerable<int> GenerateHeartrate(
            int totalSequenceLength,
            int dropsBelow60After, 
            int bouncesBackAfter = -1)
        {
            // NOTE: check input data
    
            int i = 0;
    
            // return values > 60
            while (i < dropsBelow60After)
            {
                i++;
                yield return 60 + random.Next() % 60;
            }
    
            if (bouncesBackAfter > 0)
                // return values < 60
                while (i < bouncesBackAfter)
                {
                    i++;
                    yield return random.Next() % 60; 
                }
    
            // return normal values again
            while (i < totalSequenceLength)
            {
                i++;
                yield return 60 + random.Next() % 60;
            }
        }
    }
    

    示例用法:

    HeartrateGenerator.GenerateHeartrate(100, 20, 28);
    

    【讨论】:

      【解决方案3】:

      试试这个:您可能想要更改 rand.Next(min,max) 以使用正常的心跳范围或您希望看到的任何范围的心跳值。

      public class Program
      {
          public void Main(string[] args)
          {
              Random rand = new Random();
              bool flag = true;
              int count = 0;
              while (flag)
              {
      
                  if(count==10)
                  {
                      Console.WriteLine ("dead");
                      flag = false;
                      break;
                  }
                  Thread.Sleep(1000);
                  var heart_rate = rand.Next(50,70);
                  Console.WriteLine (heart_rate);
                  if (heart_rate < 60)
                  {
                      count++;
                  }
                  else if(heart_rate > 60)
                  {
                      count=0;
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-29
        • 2019-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多