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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:22:46