python - 计算矩阵序列中的成对距离
问题描述
我正在建立一个循环神经网络,其中我有一个时间序列的特征向量 (N x D),其中 N 列中的每一列对应一个“事件”。我在另一个 N x 3 矩阵中得到了事件坐标的演变。我想构建一个事件图,而不是仅仅为网络提供一个 (N x D + 3) 矩阵,以便也利用 Graph Convolutions。因此,如果我有一个长度为 t 的时间序列,我正在处理维度 tx N x D 以及 tx N x 3 的输入,因为单个“事件”的特征和坐标都在演变。
对于单事件分类的情况,我已经建立了一种方法来构造 N 个事件坐标的密集邻接矩阵。这涉及计算 N 个坐标中每个坐标的成对距离并应用高斯核。
更准确地说,我根据this question's answer获得了距离矩阵。但是,我无法弄清楚如何将这种方法推广到一个设置,我没有不同的 N x D 坐标系而不迭代那些(这太昂贵了)。
这是我目前用来获取给定坐标的距离矩阵的张量流代码。
coordinate_norms = tf.reduce_sum(coordinates * coordinates, 1)
coordinate_norms = tf.reshape(coordinate_norms, [-1, 1])
distances = coordinate_norms - 2 * tf.matmul(coordinates, tf.transpose(coordinates)) + tf.transpose(coordinate_norms)
如果我在这里简单地使用方法,张量维度是不正确的。
解决方案
我发现,只需将距离矩阵的计算包装到一个函数中,然后使用 tf.map_fn 沿着输入张量的所需轴映射它就可以轻松完成。
def calculate_distance(coordiantes):
coordinate_norms = tf.reduce_sum(coordinates * coordinates, 1)
coordinate_norms = tf.reshape(coordinate_norms, [-1, 1])
distances = coordinate_norms - 2 * tf.matmul(coordinates, tf.transpose(coordinates)) + tf.transpose(coordinate_norms)
d = tf.map_fn(calculate_distance, X)
推荐阅读
- node.js - npm 运行脚本未写入包中
- java - 从 Android USB 附件读取数据的更好方法
- javascript - 如何捕获度量(数字和/或单位)和度量的事项并始终确保相同的度量格式/模式?
- python - 使用 pygame 缩放像素艺术游戏的最佳方法是什么?
- stored-procedures - 如何在存储过程语法“调用 <
>.storedproceduretask() - c++ - Cuda 动态并行和递归性能
- python - 对 python is 运算符感到困惑
- cordova - 科尔多瓦的问题:屏幕闪烁,不显示 PNG 图像
- python - 绘制跨越年熊猫的月线图
- c - 在结构中写入管道失败