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

如何用matplotlib.imshow绘制40×40三维数据集热力图并解决内存溢出

解决热力图绘制内存溢出问题的方案

你的问题核心是错误地用原始数据的1600个点生成了1600×1600的插值网格,导致内存占用过高。以下是针对性的解决方法:

方案一:直接利用原始规整网格绘制(最优)

因为你的数据集本身就是40×40的规整点,不需要额外插值,直接将一维数据重塑为二维数组后绘制即可:

import numpy as np
import matplotlib.pyplot as plt

# 假设x、y、z是存储对应分量的一维数组(各1600个元素)
x_2d = x.reshape(40, 40)
y_2d = y.reshape(40, 40)
z_2d = z.reshape(40, 40)

# 绘制热力图
plt.imshow(z_2d, 
           extent=[x.min(), x.max(), y.min(), y.max()],
           origin='lower', 
           aspect='auto', 
           cmap='viridis')
plt.colorbar(label='Max Source Temperature')
plt.xlabel('Reflectivity')
plt.ylabel('Emissivity')
plt.title('Max Source Temperature Heatmap')
plt.show()

方案二:按需设置插值网格分辨率(如需平滑效果)

如果需要更平滑的热力图,不要用1600×1600的网格,自定义合理的分辨率(比如100×100)即可:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf

# 定义插值后的网格大小,按需调整(示例为100×100)
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
xi_grid, yi_grid = np.meshgrid(xi, yi)

# 创建Rbf插值器并计算插值结果
rbf = Rbf(x, y, z, function='linear')
zi_grid = rbf(xi_grid, yi_grid)

# 绘制热力图
plt.imshow(zi_grid,
           extent=[x.min(), x.max(), y.min(), y.max()],
           origin='lower',
           aspect='auto',
           cmap='viridis')
plt.colorbar(label='Max Source Temperature')
plt.xlabel('Reflectivity')
plt.ylabel('Emissivity')
plt.title('Interpolated Max Source Temperature Heatmap')
plt.show()

方案三:修正原始Rbf调用的网格生成逻辑

如果坚持要用Rbf但不想改变分辨率,需提取X、Y的唯一值来生成匹配原始数据的40×40网格:

import numpy as np
from scipy.interpolate import Rbf

# 提取X和Y的唯一值(40×40网格对应各40个唯一值)
x_unique = np.unique(x)
y_unique = np.unique(y)
xi_grid, yi_grid = np.meshgrid(x_unique, y_unique)

# 插值计算
rbf = Rbf(x, y, z, function='linear')
zi_grid = rbf(xi_grid, yi_grid)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:25:10