【问题标题】:How do I add Additive Noise into a sequence of number,C#?如何将加性噪声添加到数字序列中,C#?
【发布时间】:2016-03-02 06:09:03
【问题描述】:

我是 C# 的初学者。 如何将加性噪声添加到数字序列中? 例如,我想将 Noise(3,2,1) 添加到这个序列中:

1:1
2:1
3:1
4:1
5:2
6:1
6:2
6:60
7:1
8:1
9:2
10:1

预期结果如下,噪声会随机添加。

1:1
2:1
3:1
4:1**,3**
5:2
6:1
6:2
6:60**,2**
7:1
8:1
9:2**,1**
10:1

【问题讨论】:

  • 在提问之前您尝试过什么?你能分享一些你写的代码吗?
  • 在此之前,我只是用简单的随机数编码进行测试,它产生一行随机数。我已经找到了解决方案。我将在下面分享。谢谢你。 ^_^

标签: c# random noise


【解决方案1】:

以下是使用通用列表完成任务的一种方法。泛型列表类型在概念上类似于数组,但包含额外的功能,让生活更轻松。

否则,您可以使用简单的数组来获得相同的结果。

        //using System.Collections.Generic;
        //using System.Linq;
        Console.Clear();
        List<String> Clean = new List<string>() { "1:1", "2:1", "3:1", "4:1", "5:2", "6:1", "6:2", "6:60", "7:1", "8:1", "9:2", "10:10" };
        for (int i = 0; i < 3; i++)
        {
            Random rnd = new Random(DateTime.Now.Millisecond);
            int index = rnd.Next(0, Clean.Count);
            if (Clean[index].Contains("*"))
            {//Already has noise.
                i--;
            }
            else
            {//Make some noise.
                Clean[index] = Clean[index] + "**" + i.ToString() + "* *";
            }
        }
        Clean.ForEach(var => Console.WriteLine(var));
        Console.WriteLine();
        Console.ReadLine();

【讨论】:

  • 这是一个很棒的编码。我已经了解了随机数的流程。我已经修改了您的编码,以便与我想要的预期结果相匹配。我将在下面分享。谢谢你的例子和解释。真的很有帮助。
  • 您不应在循环中创建新的Random 实例。由于DateTime.Now.Millisecond 的精度有限,它将返回相同的数字。在进入循环之前创建一个并在里面使用它。
【解决方案2】:
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            if (ofd.ShowDialog() != DialogResult.OK)
                return;

            string fn = ofd.FileName;


            string[] lines = File.ReadAllLines(fn);

            txtData.Text = "";

            List<string> Clean = new List<string>(lines);
            for (int i = 0; i < 3; i++)
            {
                Random rnd = new Random(DateTime.Now.Millisecond);
                int index = rnd.Next(0, Clean.Count);
                if (Clean[index].Contains(","))
                {//Already has noise.
                    i--;
                }
                else
                {//Make some noise.
                    Clean[index] = Clean[index] + "," + i.ToString();
                }
            }
            //Clean.ForEach(var => Console.WriteLine(var));
            // Console.WriteLine();
            // Console.ReadLine();
            for (int i = 0; i < Clean.Count; i++)
            {
                txtData.Text += Clean[i] + Environment.NewLine;
            }
        }

【讨论】:

  • 相同评论:您不应该在循环中创建新的 Random 实例。由于DateTime.Now.Millisecond 的精度有限,它将返回相同的数字。在进入循环之前创建一个并在里面使用它。
  • 我使用的是浏览文件而不是手动列出它。感谢保罗的榜样。我只是根据我的期望修改了提供的示例。谢谢大家。
  • 我已经按照您的建议进行了尝试。我将随机放在循环外,并将一系列随机数放在循环内。它运作良好。但是我注意到随机数在同一序列中添加了许多数字。我试图弄清楚如何避免它在同一行添加。谢谢马尔辛。 ^_^
猜你喜欢
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2020-05-09
  • 1970-01-01
  • 2015-12-29
  • 2018-03-05
相关资源
最近更新 更多