将循环从Python重写到C#,怎么了?

2024-09-30 05:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将部分代码从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代码。在本例中,变量“result”与Python代码中的“maximals”相同:

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;

Tags: 代码forvarresultvaluespowercostcosts

热门问题