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
相关产品推荐
相关产品推荐

