From f31fdaa27d005b769404625732079d55accc9591 Mon Sep 17 00:00:00 2001 From: bluextx Date: Sat, 11 Jan 2025 08:31:59 +0300 Subject: [PATCH] Replaced NumSharp with custom math functions for mean and standard deviation calculations --- .../LootDumpProcessor.csproj | 59 +++++++++---------- .../LooseLootProcessor/LooseLootProcessor.cs | 29 ++++++--- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/source/LootDumpProcessor/LootDumpProcessor.csproj b/source/LootDumpProcessor/LootDumpProcessor.csproj index c4bbc05..fb0ee1b 100644 --- a/source/LootDumpProcessor/LootDumpProcessor.csproj +++ b/source/LootDumpProcessor/LootDumpProcessor.csproj @@ -1,36 +1,35 @@ - - Exe - net8.0 - enable - enable - true - 1 - true - + + Exe + net8.0 + enable + enable + true + 1 + true + - - - - - - - - - - + + + + + + + + + - - - Always - - - Always - - - Always - - + + + Always + + + Always + + + Always + + diff --git a/source/LootDumpProcessor/Process/Processor/v2/LooseLootProcessor/LooseLootProcessor.cs b/source/LootDumpProcessor/Process/Processor/v2/LooseLootProcessor/LooseLootProcessor.cs index e15eda0..13be903 100644 --- a/source/LootDumpProcessor/Process/Processor/v2/LooseLootProcessor/LooseLootProcessor.cs +++ b/source/LootDumpProcessor/Process/Processor/v2/LooseLootProcessor/LooseLootProcessor.cs @@ -6,7 +6,6 @@ using LootDumpProcessor.Storage; using LootDumpProcessor.Storage.Collections; using LootDumpProcessor.Utils; using Microsoft.Extensions.Logging; -using NumSharp; namespace LootDumpProcessor.Process.Processor.v2.LooseLootProcessor { @@ -61,7 +60,7 @@ namespace LootDumpProcessor.Process.Processor.v2.LooseLootProcessor ) { var config = LootDumpProcessorContext.GetConfig(); - var spawnPointTolerance = config.ProcessorConfig.SpawnPointToleranceForForced / 100; + var spawnPointTolerance = config.ProcessorConfig.SpawnPointToleranceForForced / 100.0; var looseLootDistribution = new LooseLootRoot(); var probabilities = new Dictionary(); @@ -73,9 +72,9 @@ namespace LootDumpProcessor.Process.Processor.v2.LooseLootProcessor probabilities[itemId] = (double)count / mapCount; } - var spawnPointCount = looseLootCountsItem.MapSpawnpointCount.Select(Convert.ToDouble); - var initialMean = np.mean(np.array(spawnPointCount)).ToArray().First(); - var tolerancePercentage = config.ProcessorConfig.LooseLootCountTolerancePercentage / 100; + var spawnPointCount = looseLootCountsItem.MapSpawnpointCount.Select(Convert.ToDouble).ToList(); + var initialMean = CalculateMean(spawnPointCount); + var tolerancePercentage = config.ProcessorConfig.LooseLootCountTolerancePercentage / 100.0; var highThreshold = initialMean * (1 + tolerancePercentage); looseLootCountsItem.MapSpawnpointCount = looseLootCountsItem.MapSpawnpointCount @@ -84,8 +83,8 @@ namespace LootDumpProcessor.Process.Processor.v2.LooseLootProcessor looseLootDistribution.SpawnPointCount = new SpawnPointCount { - Mean = np.mean(np.array(looseLootCountsItem.MapSpawnpointCount)), - Std = np.std(np.array(looseLootCountsItem.MapSpawnpointCount)) + Mean = CalculateMean(looseLootCountsItem.MapSpawnpointCount.Select(Convert.ToDouble).ToList()), + Std = CalculateStandardDeviation(looseLootCountsItem.MapSpawnpointCount.Select(Convert.ToDouble).ToList()) }; looseLootDistribution.SpawnPointsForced = new List(); looseLootDistribution.SpawnPoints = new List(); @@ -227,5 +226,21 @@ namespace LootDumpProcessor.Process.Processor.v2.LooseLootProcessor return looseLootDistribution; } + + private double CalculateMean(IReadOnlyList numbers) + { + if (!numbers.Any()) return 0; + + return numbers.Average(); + } + + private double CalculateStandardDeviation(IReadOnlyList numbers) + { + if (numbers.Count == 0) return 0; + + var mean = CalculateMean(numbers); + var variance = numbers.Sum(num => Math.Pow(num - mean, 2)) / numbers.Count; + return Math.Sqrt(variance); + } } } \ No newline at end of file