如何在tensorflow数组中找到第二个最小值

2024-10-04 03:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个聚类算法,其中一部分我为每一个点簇计算一个欧几里德距离矩阵。(仅供参考,所有这些都在Tensorflow中)。每个簇是一个8维向量的列表,然后我把它们变成一个M*8矩阵。对于每个簇中的每一个点,我要找到它和它最近的邻居之间的距离。我认为最有效的方法是计算每个簇的点之间的成对距离,然后在得到的M*M矩阵的每一行中找到第二个最小值(因为每行中的最小值总是0,即给定点与自身之间的距离)。在

下面是我用来为每个簇创建欧几里德距离矩阵的代码:

    partitionedData = tf.dynamic_partition(inputs, pred, num_classes)
    for partition in partitionedData:
        N = tf.to_int32(partition.get_shape()[0])
        qexpand = tf.expand_dims(partition,1)
        qTexpand = tf.expand_dims(partition,0)
        qtile = tf.tile(qexpand,[1,N,1])
        qTtile = tf.tile(qTexpand,[N,1,1])
        deltaQ = qtile - qTtile
        deltaQ2 = deltaQ*deltaQ
        d2Q = tf.reduce_sum(deltaQ2,2)

结果矩阵可能如下所示(注意:这是一个距离平方矩阵):

^{pr2}$

对于输入矩阵:

[[2,3],[4,5],[1,4],[5,6]]

最后我想得到的是每行的第二个最小值,在本例中是2,2,2和2。另外,如果有一个更好的方法来计算一个簇中每个点到张量流中最近邻点的距离,这将是非常有用的。在


Tags: 方法距离tf矩阵expandpartitiontileqtile
1条回答
网友
1楼 · 发布于 2024-10-04 03:24:14

要在TF中找到第k个元素,您需要tf.nn.top_k。如果需要最小值,则不在X中搜索,而是在-X中搜索。在

在你的情况下,你甚至不需要它。如果你的矩阵是一个距离,对角线总是0,这会给你带来麻烦。所以只要用tf.matrix_set_diag创建改变矩阵的对角线,其中对角线是X大小的向量,其中每个值是tf.reduce_max。在

为此编写代码很简单。在

相关问题 更多 >