如何计算二维张量和具有K个数组的列表之间的欧式距离?

时间:2019-05-09 12:45:57

标签: python-3.x tensorflow

我有一个二维张量A,大小为(2,3),还有一个列表B,其中包含K = 2个数组,大小分别为C1:(2,3)和C2:(4,3) 。

现在,如何计算A的每行与C1和C2之间的欧式距离,而无需对A,C1和C2中的每一行进行迭代,最后返回R大小的结果:(2,2)。

实际上,R(0,0)是A的第一行和C1的每一行之间的欧式距离的平均值; R(0,1)是A的第一行与C2的每一行之间的欧式距离的平均值; R(1,0)是A的第二行与C1的每一行之间的欧式距离的平均值; R(1,1)是A的第二行与C2的每一行之间的欧式距离的平均值。

这是当B是3-D张量但不包含包含不同形状的2-D数组的列表时的实现:

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    a = tf.placeholder(tf.float32, [None, None])
    b = tf.placeholder(tf.float32, [None, None, None])
    a_exp = tf.expand_dims(tf.expand_dims(a, 1), 1)
    dist = tf.reduce_mean(tf.norm(b - a_exp, axis=3), axis=2)
    print(sess.run(dist, feed_dict={a: [[1, 2, 3], [4, 5, 6]],
                                    b: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))

  # [[ 7.7942286 18.186533 ]
  #  [ 2.598076  12.990381 ]]

当B是包含两个具有不同形状但没有3-D张量的2-D数组的列表时,我需要结果。

0 个答案:

没有答案