Przepisanie pętli z Pythona do C#, co tu nie gra?

Odpowiedz Nowy wątek
2019-07-11 00:42
0

Cześć, przepisałem sobie kod, który miałem prędzej w Pythonie do C#. Nie widzę za bardzo błędu, jednak zwraca on inne wyniki niż ten z Pythona, który jest poprawny. Podejrzewam, że jest to jakaś drobnostka. Czy ktoś mógłby mi ją spróbować wskazać?

Fragment kodu w Pythonie:

maximals = maximals.groupby(maximals.index.month)['avg'].nlargest(10)

SSV = 3.8
SOP = 7.78

costs = []

power_max = np.ceil(np.sort(maximals.values)[-1])
power_safe = np.ceil(11/10 * power_max)

for contr_power in range(0,int(2*power_max)):
        excess = [maximals.values[i] - contr_power for i in range(0,len(maximals.values)) if maximals.values[i] > contr_power]

        cost = len(months) * (SSV+SOP) * contr_power + SSV * sum(excess)
        costs.append([contr_power, cost])

costs_df = pd.DataFrame(costs, columns = ['contr_power', 'cost'])

power_optim = costs_df.sort_values(by='cost').contr_power.values[0]

Fragment kodu w C#:

            var pMax = result.Max(v => v.Value);
            powerAvgValues.powerMax = Math.Ceiling(pMax);

            powerAvgValues.powerSafe = Math.Ceiling(1.1*pMax);

            var months = result.AsEnumerable()
                .GroupBy(m => new { m.Time.Month })
                .Distinct()
                .ToList();

            var SSV = 3.8;  
            var SOP = 7.78;

            var monthsCount = months.Count;

            for (var contr_power = 0; contr_power < 2 * (int)pMax; contr_power++)
            {

                for (int i = 0; i < result.Count; i++)
                {
                    if (result[i].Value > contr_power)
                    {
                        var excess = result[i].Value - contr_power;
                        excessList.Add(excess);
                    }
                }

                var cost = monthsCount * (SSV + SOP) * contr_power + SSV * excessList.Sum();

                var itemToCosts = new Costs();
                itemToCosts.contr_power = contr_power;
                itemToCosts.cost = cost;
                costs.Add(itemToCosts);         

            }

            var power_optim = costs.AsEnumerable()
                .OrderBy(c => c.cost)
                .Min(d => d.contr_power);

            powerAvgValues.powerOptim = power_optim;

W przypadku C# "result" jest odpowiednikiem "maximals" z Pythona.

Pozostało 580 znaków

2019-07-11 01:31
2

A gdyby tak przejść debuggerem oba kody i zobaczyć w którym miejscu zaczyna się różnica? :P

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0