首页 > 解决方案 > 将循环从 Python 重写为 C#,出了什么问题?

问题描述

我正在尝试将部分代码从 Python 重写为 C#。我什至重写了它,但它返回不正确的结果,我看不到错误。谁能说这里有什么问题?应该是小错误吧……

这是Python代码:

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]

这是我的 C# 代码。在这种情况下,变量“结果”与 Python 代码中的“最大值”相同:

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;

标签: c#pythonlinq

解决方案


推荐阅读