繁体   English   中英

如何将数组拆分为具有给定宽度的间隔并检查计数多少次,这些值出现在每个间隔 C# 中?

[英]How to split an array into intervals with given width and check count how many times, the values have appeared in each intervals C#?

在我的数组中, arr3中有 1000 个数字。 我必须将此数组拆分为宽度differenceofMaxMink个子区间。 我怎样才能做到这一点? 稍后我必须计算arr3中的值与每个间隔匹配的次数。 但是我被困在从给定宽度的数组中创建间隔。

任何形式的帮助将不胜感激!

          public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }


    double[] Statistics1 = new double[500];
    double[] Statistics2 = new double[500];
    
    double Alpha1;
    double Alpha2;

    double RV1;
    double RV2;

    Random random = new Random();
    public double RandomDoubleInclusive() //We are using this method because random.NextDouble() method gives random number 
                                          //between 0 and 1 where 0 is inclusive and 1 is exclusive. 
                                          //Since the value of probability lies between 0 and 1, both inclusive that's why we need 
                                          //to use this method.
    {
        double d = 0.0;
        int i = 0;

        do
        {
            d = random.NextDouble();
            i = random.Next(2);
        }
        while (i == 1 && d > 0);

        return d + i;

    }

    private void label3_Click(object sender, EventArgs e)
    {

    }

    int i,j;

    private void button1_Click(object sender, EventArgs e)
    {
        int SampleSize = Convert.ToInt32(textBox3.Text);

        for ( i = 0; i<500;)
        {
            for (j = 0; j < 500;)
            {
                Alpha1 = RandomDoubleInclusive();
                Alpha2 = RandomDoubleInclusive();

                double LnPart = Math.Log(Alpha1);

                double part1 = (-2) * LnPart;

                double part2 = 2 * 3.14159 * Alpha2;

                double CosPart = Math.Cos(part2);

                double SinPart = Math.Sin(part2);


                RV1 = Math.Sqrt(part1) * CosPart;
                Statistics1[i] = RV1;

                RV2 = Math.Sqrt(part1) * SinPart;
                Statistics2[j] = RV2;


                i++;
                j++;
            }

        }

        var myList = new List<double>();
        myList.AddRange(Statistics1);
        myList.AddRange(Statistics2);

        double[] arr3 = myList.ToArray();

        
        double Max = arr3.Max();
        double Min = arr3.Min();

        double differenceofMaxMin = Max - Min; //calculating size of width of interval

        double k;

        k = Math.Log(SampleSize,2) + 1; //calculating number of subintervals

       
    }
}

我不确定我是否完全理解您要达到的目标,但我当然可以尝试通过一个示例来帮助您解决如何将数组arr3拆分为k个子区间,其中(最大)元素数差异MaxMin

var arr3 = Enumerable.Range(0, 1000);

// given: the max number of elements
var differenceofMaxMin = 300;
// determine the number of subintervals
// note that the last subinterval may contain less than differenceofMaxMin elements
var k = (int)Math.Ceiling((double)arr3.Count() / differenceofMaxMin);

var arr3_split = Enumerable.Range(0, k)
    .Select(i => arr3.Skip(i * differenceofMaxMin).Take(differenceofMaxMin));

查看您从 [0, 1] 生成随机双精度的方法,我认为这是矫枉过正,因为实际绘制 1.0 的可能性非常低。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM