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

Python绘制3D方程遇类型错误:仅尺寸为1的数组可转换为标量

问题排查与解决方案

错误原因

你遇到的only size-1 array can be converted into scalars错误,核心原因是**math模块的函数仅支持标量运算**:

  • 函数f(x,y)中使用的math.cos、math.sqrt和math.e只能处理单个数值,但你传入的x_5、y_5是通过np.meshgrid生成的多维numpy数组,两者不兼容。

修复方案

将math模块的所有函数替换为numpy对应的函数——numpy的数学函数原生支持数组元素级运算,完美适配你的网格数据:

修正后的完整代码

import numpy as np
# from sklearn.linear_model import LinearRegression  # 当前绘图逻辑未用到,可注释/删除
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d.axes3d import Axes3D

def f(x,y):
    # 替换为numpy支持数组运算的函数
    return np.cos(x) * np.cos(y) * np.exp(-np.sqrt(x**2 + y**2)/4)

x_5 = np.linspace(start=-2, stop=2, num=200)
y_5 = np.linspace(start=-2, stop=2, num=200)
x_5, y_5 = np.meshgrid(x_5, y_5)

# 绘图部分无修改
fig = plt.figure(figsize=(16, 15))
ax = fig.add_subplot(111, projection="3d")
ax.set_xlabel("X", fontsize=18)
ax.set_ylabel("Y", fontsize=18)
ax.set_zlabel("z=f(X,Y), Cost Function", fontsize=18)
ax.plot_surface(x_5, y_5, f(x_5,y_5), cmap=cm.coolwarm, alpha=0.5)
plt.show()

关键修改点

  1. 移除import math,改用numpy的数学函数:np.cos()、np.sqrt()
  2. 将math.e**(...)替换为np.exp(...)——这是numpy中计算指数的标准方式,比直接用np.e**更高效且可读性更强
  3. 可选优化:删除未使用的LinearRegression导入,减少冗余

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:05:53