创建随机数据 C#
Creating random data C#
我正在尝试创建一个心跳监视器,需要一些虚假信息输入我的程序以检查它是否正常工作。
我的程序的一个要求是如果心率整数低于某个数字就发出警报。
但是我遇到的问题是,如果心率在触发警报之前下降到低于最小心率整数,然后又直接反弹回来,那不是对警报的测试,请参见伪代码:
If heart_rate < 60:
Count = Count + 1
If heart _rate > 60:
Reset Count variable
If Count = 10:
Set off alarm
所以我需要生成模拟心率低于 60(患者死亡)的数据。
最快的方法是创建一个列表或文本文件,程序从中读取以模拟情况,或者是否有一种时髦的方法可以模拟可以触发警报的随机数,并在警报结束后保持在该整数附近出发?
抱歉,如果这听起来很混乱,我是一名 python 程序员,必须使用 C# 进行编程。
您的问题似乎是 "data stream testing" 一个。手动生成数据流不是我个人认为的 "quick"(甚至 "sane"...)。您要么获得现有数据集,要么生成它(但不是手动生成,除非它是相对较少的数据点:20~30)。
也就是说,您需要测试一些东西,这意味着您需要知道当目标案例(心率低于 60)时,您的系统会正确捕捉到 "exception"。反过来,这意味着您需要知道它发生的位置,即确切的时间。
我的建议是:自动生成一个包含 "normal" 个值的数据集。在不同的时间点(即数据流中的位置)手动插入 "exception" 值(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 处插入一个 "false alarm" (80 78 59 59 78),例如,您知道您的系统应该重置 counter
。你会为 "alarm"; 做同样的事情。你会知道应该发出警报的索引(时间点)。
Edit:关于 "manually" 插入目标值的部分应解释为 "empirically selecting an index of an array (or a list) filled with random data, where the data should be inserted"。
试试这个:您可能想要更改 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;
}
}
}
}
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);
我正在尝试创建一个心跳监视器,需要一些虚假信息输入我的程序以检查它是否正常工作。
我的程序的一个要求是如果心率整数低于某个数字就发出警报。
但是我遇到的问题是,如果心率在触发警报之前下降到低于最小心率整数,然后又直接反弹回来,那不是对警报的测试,请参见伪代码:
If heart_rate < 60:
Count = Count + 1
If heart _rate > 60:
Reset Count variable
If Count = 10:
Set off alarm
所以我需要生成模拟心率低于 60(患者死亡)的数据。 最快的方法是创建一个列表或文本文件,程序从中读取以模拟情况,或者是否有一种时髦的方法可以模拟可以触发警报的随机数,并在警报结束后保持在该整数附近出发?
抱歉,如果这听起来很混乱,我是一名 python 程序员,必须使用 C# 进行编程。
您的问题似乎是 "data stream testing" 一个。手动生成数据流不是我个人认为的 "quick"(甚至 "sane"...)。您要么获得现有数据集,要么生成它(但不是手动生成,除非它是相对较少的数据点:20~30)。
也就是说,您需要测试一些东西,这意味着您需要知道当目标案例(心率低于 60)时,您的系统会正确捕捉到 "exception"。反过来,这意味着您需要知道它发生的位置,即确切的时间。
我的建议是:自动生成一个包含 "normal" 个值的数据集。在不同的时间点(即数据流中的位置)手动插入 "exception" 值(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 处插入一个 "false alarm" (80 78 59 59 78),例如,您知道您的系统应该重置 counter
。你会为 "alarm"; 做同样的事情。你会知道应该发出警报的索引(时间点)。
Edit:关于 "manually" 插入目标值的部分应解释为 "empirically selecting an index of an array (or a list) filled with random data, where the data should be inserted"。
试试这个:您可能想要更改 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;
}
}
}
}
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);