You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

光伏系统建模:如何生成温度损耗列表并优化循环效率

光伏系统温度功率损耗计算优化方案

你的代码存在两个核心问题:

  1. 逻辑错误:calc_temp_loss函数中,当判断irr>0时,使用的是整个module_temp Series(而非当前irr对应的单个温度值),导致每次循环返回的都是完整的温度损耗数组,最终power_loss_list里的每个元素都是数组(和你截图里的输出一致)。
  2. 效率问题:手动遍历8760个值完全没必要,pandas支持向量化运算,能一次性完成所有计算,比循环高效得多。

修正后的代码(向量化实现)

import pandas as pd

# 计算总辐照度
total_irr = df['Direct Irradiance'] + df['Diffuse Irradiance']
# 计算组件温度(向量化运算,直接生成Series)
module_temp = t_dry + (((noct - 20)/800) * total_irr)
# 向量化计算温度损耗:总辐照度为0时损耗0,否则按公式计算
temp_loss = pd.Series(0, index=total_irr.index)
temp_loss[total_irr > 0] = (module_temp[total_irr > 0] - 25) * power_coeff

# 直接转为DataFrame列(无需先存列表)
df['temp_loss'] = temp_loss

代码说明

  • 全程使用pandas的向量化操作,无需循环,一次计算完成8760个值的处理,效率远高于遍历。
  • 通过布尔索引total_irr > 0精准定位需要计算损耗的行,直接赋值对应结果,其余行保持0。
  • 直接将结果存入原DataFrame,省去了手动维护列表的步骤。

另一种简洁写法(用numpy.where)

如果习惯更紧凑的代码,可以用numpy.where实现:

import numpy as np

total_irr = df['Direct Irradiance'] + df['Diffuse Irradiance']
module_temp = t_dry + (((noct - 20)/800) * total_irr)
temp_loss = np.where(total_irr > 0, (module_temp - 25) * power_coeff, 0)
df['temp_loss'] = temp_loss

这种写法同样是向量化运算,逻辑更紧凑,判断和计算一步完成。

内容的提问来源于stack exchange,提问作者Joe Baylay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:46:11