Что я не могу понять, так это то, как я запускаю pre () и выполняю трудоемкую задачу, в то время как выполняются first () и second () и third (), но третий запускается, когда pre закончено?
blockquote>Исходя из этого вопроса, насколько я понимаю, вы хотите:
- Запускать
]pre
,first
иsecond
одновременно- Как только
pre
завершит выполнение, запуститеthird
Если это так, то следующий код сделает это:
var obj = {test: "Test"}; async function pre(obj) {console.log(`${pre.name} :`, obj); return obj;} async function first(obj) {console.log(`${first.name} :`, obj)} async function second(obj) {console.log(`${second.name} :`, obj)} async function third(obj) {console.log(`${third.name} :`, obj)} Promise.all([first(obj), second(obj), pre(obj).then(third)]);
[ 116] функция берет массив функций, которые возвращают обещание и выполняет их параллельно. Обратите внимание на
pre(obj).then(third)
. Это выполнит функциюpre
и после завершения выполнит функциюthird
.
Я нашел это на веб-сайте CodeProject. Это похоже на хороший класс C# для обработки большинства основных статистических функций.
Необходимо быть осторожными. Существует несколько способов вычислить стандартное отклонение, которое дало бы тот же ответ, если бы арифметика с плавающей точкой была прекрасна. Они все точны для некоторых наборов данных, но некоторые намного лучше, чем другие при некоторых обстоятельствах.
метод я видел предложенный, вот тот, который, скорее всего, даст плохие ответы. Я использовал его сам, пока это не отказало на мне.
См. Сравнивать три метода вычисления стандартного отклонения .
Как насчет http://ilnumerics.net/ или http://numerics.mathdotnet.com/ (объединяются от http://www.codeplex.com/dnAnalytics )
Взгляните на MathNet, который это не специально для статистики, но могла бы быть полезная функциональность для того, что Вы хотите
Я решил, что это было более быстро для записи моего собственного, которое просто сделало то, в чем я нуждался. Вот код...
/// <summary>
/// Very basic statistical analysis routines
/// </summary>
public class Statistics
{
List<double> numbers;
public double Sum { get; private set; }
public double Min { get; private set; }
public double Max { get; private set; }
double sumOfSquares;
public Statistics()
{
numbers = new List<double>();
}
public int Count
{
get { return numbers.Count; }
}
public void Add(double number)
{
if(Count == 0)
{
Min = Max = number;
}
numbers.Add(number);
Sum += number;
sumOfSquares += number * number;
Min = Math.Min(Min,number);
Max = Math.Max(Max,number);
}
public double Average
{
get { return Sum / Count; }
}
public double StandardDeviation
{
get { return Math.Sqrt(sumOfSquares / Count - (Average * Average)); }
}
/// <summary>
/// A simplistic implementation of Median
/// Returns the middle number if there is an odd number of elements (correct)
/// Returns the number after the midpoint if there is an even number of elements
/// Sorts the list on every call, so should be optimised for performance if planning
/// to call lots of times
/// </summary>
public double Median
{
get
{
if (numbers.Count == 0)
throw new InvalidOperationException("Can't calculate the median with no data");
numbers.Sort();
int middleIndex = (Count) / 2;
return numbers[middleIndex];
}
}
}
AForge.NET имеет пространство имен AForge.Math, предоставляющее некоторые базовые функции статистики: Гистограмма, среднее значение, медиана, stddev, энтропия.