中位数是一个排序后数组的中间元素(如果数组有偶数个元素,则为两个中间项的平均值):
double[] source = new double[] { 1, 2, 3, 4, 5 };
Array.Sort(source);
double med = source.Length % 2 == 0
? (source[source.Length / 2 - 1] + source[source.Length / 2]) / 2.0
: source[source.Length / 2];
double[] d = source
.Select(x => Math.Abs(x - med))
.OrderBy(x => x)
.ToArray();
double MADe = 1.483 * (d.Length % 2 == 0
? (d[d.Length / 2 - 1] + d[d.Length / 2]) / 2.0
: d[d.Length / 2]);
x[]
的中位数med
(您可以对数组进行排序并获取中间值,但还有更有效的方法)d[]
d[]
数组的中位数如何编写一个函数来计算中位数,您可以在这里找到。
然后您的函数可能会像这样:
var arrOfValues = new int[] { 1, 3, 5, 7, 9 };
var di = new List<int>(); //List where all di will be stored
var median = calcMedian(); //See the link how to write it
foreach(var elem in arrOfValues)
{
di.Add(Math.Abs(elem - median));
}