Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算双精度[]列表中每个双精度的总体标准偏差?_C#_Linq_Standard Deviation - Fatal编程技术网

C# 如何计算双精度[]列表中每个双精度的总体标准偏差?

C# 如何计算双精度[]列表中每个双精度的总体标准偏差?,c#,linq,standard-deviation,C#,Linq,Standard Deviation,我有一个双数组列表,例如:list ys 它们都包含xy图中的y值。我想计算x的所有点的总体标准偏差,本质上是每个数组中的每个元素的总体标准偏差。例如: 取每个数组的第一个元素,计算总体标准偏差,将值放入新数组。移动到列表中所有数组中的下一个元素,计算总体标准偏差并放入新创建的数组。等等,直到我们到达所有阵列的末尾 我是否可以在不使用linq或类似工具的嵌套for循环的情况下快速实现这一点 示例输入ys={[1,2,3,4,5],[10,20,30,40,50],[100200300400500

我有一个双数组列表,例如:
list ys

它们都包含xy图中的y值。我想计算x的所有点的总体标准偏差,本质上是每个数组中的每个元素的总体标准偏差。例如:

取每个数组的第一个元素,计算总体标准偏差,将值放入新数组。移动到列表中所有数组中的下一个元素,计算总体标准偏差并放入新创建的数组。等等,直到我们到达所有阵列的末尾

我是否可以在不使用linq或类似工具的嵌套for循环的情况下快速实现这一点

示例输入
ys={[1,2,3,4,5],[10,20,30,40,50],[100200300400500]}

输出:
double[]=[44.69899328、89.39798655、134.0969798178.7959731223.4949664]

44.69899328
来自:
1,10100

89.39798655
来自:
2200

134.0969798
来自:
33000

178.7959731
来自:
44000

223.4949664
来自:
55000

尝试以下内容:

        static void Main(string[] args)
        {
            List<Double[]> ys = new List<double[]>() { new double[] { 1, 2, 3, 4, 5 }, new double[] { 10, 20, 30, 40, 50 }, new double[] { 100, 200, 300, 400, 500 } };

            double[] results = ys.SelectMany(x => x.Select((y,i) => new {y = y, i = i})).GroupBy(x => x.i).Select(x => StandardDeviation(x.Select(y => y.y).ToArray())).ToArray(); 

            
        }
         static double StandardDeviation(double[] input)
         {
             double average = input.Average();
             double sumOfSquares = input.Select(x => (average - x) * (average - x)).Sum();

             return Math.Sqrt(sumOfSquares / input.Length);
         }
static void Main(字符串[]args)
{
List ys=new List(){new double[]{1,2,3,4,5},new double[]{10,20,30,40,50},new double[]{100,200,300,400,500};
double[]results=ys.SelectMany(x=>x.Select((y,i)=>new{y=y,i=i})).GroupBy(x=>x.i).Select(x=>standarddiation(x.Select(y=>y.y).ToArray()).ToArray();
}
静态双标准偏差(双[]输入)
{
双重平均=输入。平均();
double-sumOfSquares=input.Select(x=>(average-x)*(average-x)).Sum();
返回Math.Sqrt(sumOfSquares/input.Length);
}
尝试以下操作:

        static void Main(string[] args)
        {
            List<Double[]> ys = new List<double[]>() { new double[] { 1, 2, 3, 4, 5 }, new double[] { 10, 20, 30, 40, 50 }, new double[] { 100, 200, 300, 400, 500 } };

            double[] results = ys.SelectMany(x => x.Select((y,i) => new {y = y, i = i})).GroupBy(x => x.i).Select(x => StandardDeviation(x.Select(y => y.y).ToArray())).ToArray(); 

            
        }
         static double StandardDeviation(double[] input)
         {
             double average = input.Average();
             double sumOfSquares = input.Select(x => (average - x) * (average - x)).Sum();

             return Math.Sqrt(sumOfSquares / input.Length);
         }
static void Main(字符串[]args)
{
List ys=new List(){new double[]{1,2,3,4,5},new double[]{10,20,30,40,50},new double[]{100,200,300,400,500};
double[]results=ys.SelectMany(x=>x.Select((y,i)=>new{y=y,i=i})).GroupBy(x=>x.i).Select(x=>standarddiation(x.Select(y=>y.y).ToArray()).ToArray();
}
静态双标准偏差(双[]输入)
{
双重平均=输入。平均();
double-sumOfSquares=input.Select(x=>(average-x)*(average-x)).Sum();
返回Math.Sqrt(sumOfSquares/input.Length);
}

我首先要定义一个扩展方法,它可以透视数据

public static class Extensions
{
    public static IEnumerable<T[]> Pivot<T>(this List<T[]> items)
    {
        return items.SelectMany( arr => arr.Select( (x,i) => new{Value=x,Index = i}) )
                    .GroupBy(x => x.Index)
                    .Select(g => g.Select(x => x.Value).ToArray());
    }
}
StDev
功能:

public static double StDev(double[] input)
{
    double avg = input.Average();
    double sum = input.Select(x => (avg - x) * (avg - x)).Sum();

    return Math.Sqrt(sum / input.Length);
}

实例:

首先,我将定义一个扩展方法,它可以透视数据

public static class Extensions
{
    public static IEnumerable<T[]> Pivot<T>(this List<T[]> items)
    {
        return items.SelectMany( arr => arr.Select( (x,i) => new{Value=x,Index = i}) )
                    .GroupBy(x => x.Index)
                    .Select(g => g.Select(x => x.Value).ToArray());
    }
}
StDev
功能:

public static double StDev(double[] input)
{
    double avg = input.Average();
    double sum = input.Select(x => (avg - x) * (avg - x)).Sum();

    return Math.Sqrt(sum / input.Length);
}

实时示例:

对于所有子阵列长度相同的数据,这可能是:

var stdDevs = Enumerable.Range(0, ys[0].Length)
    .Select(i => ys.Select(y => y[i]))
    .Select(StdDev); 
最后一部分可以是
。选择(Z=>new{Z,V=StdDev(Z)})如果需要输入值

测试:

不同长度 如果子数组的长度不同,那么版本就不那么漂亮,但仍然可读

var stdDevs = Enumerable.Range(0, ys.Max( y => y.Length))
    .Select(i => ys.Where( y => i < y.Length).Select(y => y[i]))
    .Select(Z => new { Z, V = StdDev(Z) }); 

对于所有子阵列长度相同的数据,这可能是:

var stdDevs = Enumerable.Range(0, ys[0].Length)
    .Select(i => ys.Select(y => y[i]))
    .Select(StdDev); 
最后一部分可以是
。选择(Z=>new{Z,V=StdDev(Z)})如果需要输入值

测试:

不同长度 如果子数组的长度不同,那么版本就不那么漂亮,但仍然可读

var stdDevs = Enumerable.Range(0, ys.Max( y => y.Length))
    .Select(i => ys.Where( y => i < y.Length).Select(y => y[i]))
    .Select(Z => new { Z, V = StdDev(Z) }); 

你能举个例子吗?例如,
{[1,2,3],[15,20,40]}
的期望输出是什么?示例的输出是[7,9,18.5]@Fildor 7是样本的标准偏差:1,15。9是2,15的标准偏差。18.5是3的标准偏差,40@Fildor可能是因为您使用的是样本标准偏差。如果你使用总体标准差,这些就是你得到的数字。将数字插入你选择的标准偏差计算器:)我正在使用这个:哦哦,你用Dmitry的例子了吗??是的,对不起,算了吧。我的错。错过了你实际上是行动和回答Dmitry。。。哈哈,你能举个例子吗?例如,
{[1,2,3],[15,20,40]}
的期望输出是什么?示例的输出是[7,9,18.5]@Fildor 7是样本的标准偏差:1,15。9是2,15的标准偏差。18.5是3的标准偏差,40@Fildor可能是因为您使用的是样本标准偏差。如果你使用总体标准差,这些就是你得到的数字。将数字插入你选择的标准偏差计算器:)我正在使用这个:哦哦,你用Dmitry的例子了吗??是的,对不起,算了吧。我的错。错过了你实际上是行动和回答Dmitry。。。hahaI相信你已经获得了每个数组的标准偏差。不完全是我需要的。因为我需要每个数组中每个元素的标准偏差。请看我在原帖中的例子。为了更好地反映我的问题,我对示例进行了修改。在您发表评论之前,我更新了代码。我稍微更新了代码,使其更简单。我相信您已经使用了每个数组的标准偏差。不完全是我需要的。因为我需要每个数组中每个元素的标准偏差。请看我在原帖中的例子。为了更好地反映我的问题,我对示例进行了修改。在您发表评论之前,我更新了代码。我稍微更新了代码,使之更简单。