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

Python中如何基于向量和矩阵绘制函数图像

矩阵/向量参数函数的网格适配可视化方案

核心逻辑是利用numpy的广播机制对齐网格采样点和矩阵运算的维度,完全避免逐点循环,实现步骤如下:

  • 先用numpy.meshgrid生成x、y轴的网格采样矩阵X、Y,和普通二维函数绘图的初始化逻辑完全一致
  • 将X、Y分别展平为一维数组后按列堆叠,得到形状为(N, 向量维度)的采样点矩阵,其中N为总采样点数,每一行对应一个空间采样点的向量形式
  • 直接将采样点矩阵代入带矩阵/向量参数的函数做批量运算,numpy会自动处理维度匹配,不需要单独遍历每个采样点
  • 运算得到的结果是一维数组,将其reshape为和X、Y相同的形状,即可直接传入matplotlib的绘图接口使用

完整示例(二次型函数绘图)

以下是二次型函数 f(v) = v^T A v 的实现代码,其中A为2×2参数矩阵,v为二维输入向量:

import numpy as np
import matplotlib.pyplot as plt

# 定义参数矩阵
A = np.array([[2, 1], [1, 3]])

# 生成xy平面网格
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)

# 网格转为批量向量
sample_vectors = np.stack([X.ravel(), Y.ravel()], axis=1)

# 批量计算所有采样点的函数值
Z = np.diag(sample_vectors @ A @ sample_vectors.T).reshape(X.shape)

# 3D表面绘图
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(v)')
plt.show()

扩展说明

如果你的输入向量维度高于2,只需要调整stack步骤的维度即可,广播机制会自动适配批量运算逻辑,运算效率比逐点for循环高2~3个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03