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

Matplotlib绘制ReLU函数时零值不显示的问题求助

解决Matplotlib绘制ReLU函数时零值不显示的问题

问题背景

尝试用Matplotlib绘制ReLU函数,但绘图时t≤0对应的零值段未显示。ReLU函数返回的是40元素的数组,单独绘制全零数组正常,但直接绘制relu(t)就缺失零值段。

初始代码

import numpy as np
import matplotlib.pyplot as plt

def relu(t):
    t[t <= 0] = 0
    return t

def relu_plot():
    t = np.arange(-2, 2, 0.1)
    k = np.zeros(40)
    plt.plot(t, relu(t))
    plt.show()
    print(len(relu(t)))

relu_plot()

问题现象

绘图仅显示t>0时的曲线部分,t≤0的零值段完全缺失,但len(relu(t))输出为40,说明数组长度正常。

尝试更新

改用拼接数组的方式绘制时,曲线正常显示:

# 在relu_plot函数内修改
j = t[20:]  # t>0的部分
k = np.concatenate((np.zeros(20), j))
plt.plot(t, k)

问题原因

问题出在ReLU函数的实现上:t[t <=0] =0直接修改了传入的原数组t。执行relu(t)后,原数组t中≤0的元素被改成0,此时plt.plot(t, relu(t))实际是在绘制(0,0), (0,0), ..., (0.1,0.1)...这样的点。Matplotlib绘制连续线时,x轴重复的点会被合并,导致零值段看起来消失了。

解决方案

方案1:创建数组副本修改

在ReLU函数中对输入数组创建副本,避免修改原数组:

def relu(t):
    t_copy = t.copy()
    t_copy[t_copy <= 0] = 0
    return t_copy

方案2:使用numpy向量化函数实现

用np.maximum直接生成结果,不修改原数组:

def relu(t):
    return np.maximum(t, 0)

修改后重新运行relu_plot(),即可正常显示包含零值段的ReLU曲线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:55:26