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

如何创建中心值最高、用于热图绘制的n×n二维数组?

实现中心数值最高的n×n热图数组

要生成符合要求的数组,核心逻辑是基于每个元素到数组中心的距离,映射出递减的数值。以下是具体实现思路和Python代码:

核心步骤

  • 确定数组中心坐标:
    • 若n为奇数,中心是整数坐标 (center, center),其中 center = n // 2
    • 若n为偶数,取四个中心位置的中点作为虚拟中心,坐标为 (center - 0.5, center - 0.5),保证对称
  • 计算每个元素到中心的距离:推荐用欧氏距离,得到的数值衰减更平滑;也可以用曼哈顿距离(计算更快)
  • 距离转递减数值:常用两种方式:
    1. 高斯函数:exp(-distance²/(2σ²)),σ控制衰减速度,数值范围0~1,中心为1
    2. 倒数映射:1/(distance + 1),计算简单,数值随距离增大逐渐趋近于0

Python 实现代码

方法1:高斯函数(平滑衰减)

import numpy as np

def create_heatmap_array(n, sigma=1.0):
    # 生成坐标网格
    x = np.arange(n)
    y = np.arange(n)
    xx, yy = np.meshgrid(x, y)
    
    # 计算中心坐标
    center = n // 2 if n % 2 == 1 else (n / 2 - 0.5)
    
    # 计算欧氏距离
    distance = np.sqrt((xx - center)**2 + (yy - center)**2)
    
    # 高斯函数转换为递减数值
    heatmap = np.exp(-(distance**2) / (2 * sigma**2))
    return heatmap

方法2:简单倒数映射

import numpy as np

def create_heatmap_array(n):
    x = np.arange(n)
    y = np.arange(n)
    xx, yy = np.meshgrid(x, y)
    
    center = n // 2 if n % 2 == 1 else (n / 2 - 0.5)
    distance = np.sqrt((xx - center)**2 + (yy - center)**2)
    
    # 倒数映射,避免除以0(中心距离为0,加1保证中心值为1)
    heatmap = 1 / (distance + 1)
    return heatmap

示例使用

比如生成5×5的数组:

arr = create_heatmap_array(5)
print(arr)

输出(高斯方法,sigma=1):

[[0.1353 0.3679 0.6065 0.3679 0.1353]
 [0.3679 0.6065 0.8825 0.6065 0.3679]
 [0.6065 0.8825 1.     0.8825 0.6065]
 [0.3679 0.6065 0.8825 0.6065 0.3679]
 [0.1353 0.3679 0.6065 0.3679 0.1353]]

自定义调整

  • 若需要更快的计算,可以把欧氏距离换成曼哈顿距离:distance = np.abs(xx - center) + np.abs(yy - center)
  • 调整sigma可以改变衰减速度:sigma越大,数值衰减越慢,热图的“热点”范围越广
  • 如果需要整数数值,可以对结果进行缩放后取整,比如heatmap = (np.exp(-(distance**2)/(2*sigma**2)) * 100).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:55:23