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

基于信号衰减规则的网络信号强度二维数组填充实现方案

解决多源信号衰减传播问题

这个问题本质是多源信号的衰减传播计算:每个非0节点是信号源,信号向四周传播,每经过1个节点(曼哈顿距离每增加1)强度衰减1,每个节点的最终信号值取所有可达源能提供的最大信号值(结果不能为负)。

用NumPy可以高效实现这个逻辑,步骤如下:


1. 提取信号源的位置与强度

首先从初始数组中找出所有非0的信号源,记录它们的坐标和对应的强度:

import numpy as np

# 初始数组
d_initial = np.array([[0, 0, 0, 3],
                      [0, 2, 0, 3],
                      [0, 0, 0, 0],
                      [0, 0, 0, 3]])

# 获取所有信号源的坐标(y, x)和对应的强度
sources = []
for y in range(d_initial.shape[0]):
    for x in range(d_initial.shape[1]):
        val = d_initial[y, x]
        if val > 0:
            sources.append((y, x, val))

2. 生成网格坐标矩阵

为了批量计算每个节点到所有源的曼哈顿距离,先生成整个网格的坐标矩阵:

# 生成y轴和x轴的坐标网格
y_grid, x_grid = np.meshgrid(np.arange(d_initial.shape[0]), 
                             np.arange(d_initial.shape[1]), 
                             indexing='ij')

3. 计算每个源的信号贡献并取最大值

对每个信号源,计算它给每个节点的信号值(源强度 - 曼哈顿距离,结果小于0则置0),然后所有源的贡献取最大值:

# 初始化结果数组为全0
d_result = np.zeros_like(d_initial)

for y_src, x_src, strength in sources:
    # 计算当前源到每个节点的曼哈顿距离
    distance = np.abs(y_grid - y_src) + np.abs(x_grid - x_src)
    # 计算该源的信号贡献:强度衰减后不能为负
    contribution = np.maximum(strength - distance, 0)
    # 更新结果数组:取当前最大值
    d_result = np.maximum(d_result, contribution)

4. 验证结果

运行上述代码后,d_result就会和目标数组完全一致:

print(d_result)
# 输出:
# [[0 1 2 3]
#  [1 2 2 3]
#  [0 1 1 2]
#  [0 1 2 3]]

逻辑说明

  • 曼哈顿距离:信号向上下左右相邻节点传播,每移动一个节点距离加1,符合曼哈顿距离的计算规则
  • 取最大值:若一个节点被多个信号源覆盖,取能提供的最强信号值
  • 非负限制:如果源强度减去距离后为负,说明信号无法到达该节点,保持0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:15:31