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

Python条件函数编写与绘图报错:ValueError问题求助

解决Numpy数组条件判断导致的ValueError错误

你遇到的错误是因为普通if语句无法直接处理Numpy数组的条件判断——当你用ss < 318.842...判断一个数组时,会得到一个布尔值数组,而if需要单个布尔值,所以触发"真值不明确"的报错。

直接用Numpy的向量化条件函数替换普通if-else即可解决,修改后的完整代码如下:

import matplotlib.pyplot as plt
import numpy as np

ss = np.linspace(300, 1000, 15)

def PT3000(ss):
    # 用np.where处理二元分支条件,对数组每个元素应用判断
    return np.where(ss < 318.842719019854, 4.602 + 37440.0/ss, -0.3 + 3600.0/ss)

def PT2000(ss):
    # 用np.select处理多分支条件,依次匹配条件并返回对应值
    conditions = [
        ss < 318.842719019854,
        ss > 945.33959
    ]
    values = [
        4.602 + 37440.0/ss,
        -0.3 + 3600.0/ss
    ]
    default_val = 6.87109574235995e-6 * ss**0.5 * (-1 + 96000.0/ss) + 62.144
    return np.select(conditions, values, default=default_val)

fig= plt.figure()
plt.plot(ss, PT2000(ss), label='PT2000')
plt.plot(ss, PT3000(ss), label='PT3000')
plt.title('Productietijd [24x12]')
plt.xlabel('Verstijverafstand [mm]')
plt.ylabel('Productijd van een paneel [uur]')
plt.grid(visible=True)
plt.legend()
plt.show()

改动说明

  • PT3000函数用np.where(条件, 满足条件时的值, 不满足时的值)替代原if-else,直接对数组每个元素做判断
  • PT2000函数用np.select(条件列表, 值列表, default=默认值)处理三分支逻辑,按顺序匹配条件,未匹配到的元素使用默认值
  • 给plt.plot加上label参数,确保图例能正常显示(原代码未设置标签,图例为空)

运行修改后的代码就能正常生成所需的折线图了。

内容的提问来源于stack exchange,提问作者Aileen Obianyor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:35:31