使用pvlib.inverter.fit_sandia遇TypeError:polyfit期望x为一维向量
排查
pvlib.inverter.fit_sandia的TypeError问题 问题根源
你遇到的TypeError: expected 1D vector for x错误,核心原因是numpy的polyfit函数要求拟合变量为一维数组,但函数内部提取的x数组形状为(0, 18),说明输入数据维度不符合要求,或内部分组时出现了空数组。
具体排查与修复步骤
1. 检查输入数组维度
先确认ac_power、dc_power、dc_voltage的实际形状:
print(ac_power.shape, dc_power.shape, dc_voltage.shape)
正常输出应为(18,)(一维数组);若输出是(18,1)或(1,18)这类二维形状,会导致函数内部处理出错。
2. 转换数组为一维格式
如果数组是二维的,用ravel()或flatten()转换:
ac_power = ac_power.ravel() dc_power = dc_power.ravel() dc_voltage = dc_voltage.ravel()
3. 验证电压等级分组有效性
手动检查每个电压等级的样本数,避免分组为空:
groups = {'Vmax': [], 'Vnom': [], 'Vmin': []} for level, ac, dc_p, dc_v in zip(dc_voltage_level, ac_power, dc_power, dc_voltage): groups[level].append((ac, dc_p, dc_v)) for level, data in groups.items(): print(f"{level} 样本数: {len(data)}") if len(data) == 0: print(f"警告:{level} 分组无有效样本")
若某分组样本数为0,会直接导致polyfit接收空数组触发错误。
4. 确认参数合法性
当前参数顺序正确,但需确保:
Pac0为逆变器额定交流功率(330kW设置合理)Pnt为夜间损耗功率(20W设置合理)dc_voltage为数值数组(int64类型无影响)
修复后示例代码
import pvlib import numpy as np # 确保输入为一维数组 ac_power = ac_power.ravel() dc_power = dc_power.ravel() dc_voltage = dc_voltage.ravel() Pac0 = 330 * 1000 Pnt = 20 sandia_params = pvlib.inverter.fit_sandia( ac_power, dc_power, dc_voltage, dc_voltage_level, Pac0, Pnt )
内容的提问来源于stack exchange,提问作者Michele
相关产品推荐
相关产品推荐

