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

Matplotlib绘制NumPy矩阵元素时出现异常行为求助

问题根源与解决方案

嘿,这个奇怪的现象其实是NumPy矩阵的二维特性和Matplotlibplot函数的参数解析逻辑差异导致的,我来给你拆解清楚:

为什么会出现两种不同结果?

你创建t的时候用了np.matrix,这会生成一个二维行矩阵(维度是(1, 1024)),对应的x = np.sinc(t)也是同样维度的二维矩阵。而Matplotlib的plot函数对二维输入的处理,在两种调用方式下有明显区别:

  • 当你显式指定color、linestyle等参数时:plt.plot(t,x,color='blue', linestyle='solid', linewidth=2),Matplotlib会把二维数组的每一列当作一条曲线来绘制。因为你的矩阵只有1列,所以会正常画出sinc函数的曲线。
  • 当你用简写格式字符串'-ob'时:plt.plot(t,x,'-ob'),Matplotlib的解析逻辑会把输入的二维数组展平成一维,然后将t和x的所有元素一一配对绘制。这就导致了点被错误地连接,出现混乱的图形(比如折线乱跳或者密集的点)。

怎么解决?

有两种简单的修复方式:

  1. 放弃使用np.matrix,改用np.array(推荐,因为现在NumPy官方更推荐用array而非matrix):
    import numpy as np
    import matplotlib.pyplot as plt
    t = np.linspace(-10,10,1024)  # 直接生成一维数组
    x = np.sinc(t)
    plt.plot(t,x,color='blue', linestyle='solid', linewidth=2)
    # 或者用简写格式,结果完全一致
    # plt.plot(t,x,'-ob')
    plt.show()
    
  2. 如果一定要保留np.matrix,把它转成一维数组:
    可以用.A.flatten()或者.ravel()方法把二维矩阵转成一维数组,这样两种plot写法都会正常工作:
    plt.plot(t.A.flatten(), x.A.flatten(), '-ob')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:58:56