使用 Numpy 获取对象彼此距离的最佳方法是什么?

What is the best way to get objects' distances to one another using Numpy?

你好很棒的社区!

我正在 Python 中编写一个离散的 2d 多代理环境。我希望我的代理人在彼此附近时共享信息。检测彼此附近的代理的最佳方法是什么? 我最初的想法是使用某种 get_distances() 方法获取所有代理之间的距离,该方法接受代理位置的向量并吐出距离矩阵(任何类型的距离,但最好是 L1),如下所示:

>> positions = np.array([[agent_0_row, agent_0_col],
                         [agent_1_row, agent_1_col],
                         [agent_2_row, agent_2_col]])

>> get_distances(positions)
np.array([[d_00, d_01, d_02],
          [d_10, d_11, d_12],
          [d_20, d_21, d_22]])

其中 d_ab 是代理 a 和代理 b 之间的距离。然后检查低于特定阈值的距离。是否有像 get_distances() 这样的 Numpy 内置函数?或者有更好的方法吗?

您可以使用 numpy 广播来做到这一点,您只需要向 positions 数组的两个切片添加不同的新轴:

def get_distances(positions):
    relative_positions = positions[None, :, :] - positions[:, None, :]
    # now do the distance calculation however you want, here's L1:
    distances = np.abs(relative_positions).sum(axis=2)
    return distances