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

如何降低使用matplotlib绘制黑色立方体的代码运行耗时

Matplotlib绘制黑色立方体的性能优化方案

原代码存在两个核心性能问题:

  • 三层循环共调用plot3D超过1600万次,函数调用开销占了绝大多数耗时
  • 绘制了立方体内部所有冗余点,实际展示立方体只需要线框或表面数据,完全不需要遍历内部点

具体优化方案根据需求分为两类:

场景1:绘制黑色线框立方体

只需要构造立方体的8个顶点和12条棱的坐标,批量绘制即可,仅需调用12次绘图接口,耗时不到原代码的万分之一:

import matplotlib.pyplot as plt
import numpy as np

ax = plt.axes(projection='3d')
# 立方体8个顶点坐标 (x,y,z),范围0到255
vertices = np.array([[0,0,0], [255,0,0], [255,255,0], [0,255,0],
                     [0,0,255], [255,0,255], [255,255,255], [0,255,255]])
# 12条棱对应的顶点索引
edges = [[0,1], [1,2], [2,3], [3,0],
         [4,5], [5,6], [6,7], [7,4],
         [0,4], [1,5], [2,6], [3,7]]
# 批量绘制所有棱
for edge in edges:
    ax.plot3D(vertices[edge, 0], vertices[edge, 1], vertices[edge, 2], 'black')
# 固定坐标轴范围和比例,避免立方体变形
ax.set_xlim(0,255)
ax.set_ylim(0,255)
ax.set_zlim(0,255)
ax.set_box_aspect([1,1,1])
plt.show()

场景2:绘制填充的黑色立方体

使用Poly3DCollection批量绘制6个面,性能更高:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np

ax = plt.axes(projection='3d')
vertices = np.array([[0,0,0], [255,0,0], [255,255,0], [0,255,0],
                     [0,0,255], [255,0,255], [255,255,255], [0,255,255]])
# 6个面对应的顶点索引
faces = [[vertices[j] for j in [0,1,2,3]],
         [vertices[j] for j in [4,5,6,7]],
         [vertices[j] for j in [0,1,5,4]],
         [vertices[j] for j in [2,3,7,6]],
         [vertices[j] for j in [0,3,7,4]],
         [vertices[j] for j in [1,2,6,5]]]
ax.add_collection3d(Poly3DCollection(faces, facecolor='black', edgecolor='black'))
ax.set_xlim(0,255)
ax.set_ylim(0,255)
ax.set_zlim(0,255)
ax.set_box_aspect([1,1,1])
plt.show()

补充说明

如果你确实需要绘制立方体范围内的大量散点,也不要循环调用plot3D,改用scatter接口一次传入所有坐标数组,性能会提升百倍以上。所有matplotlib绘图场景都要尽量避免循环调用绘图接口,优先使用批量传参的方式降低开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:27:00