我有一个二维张量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数组的列表时,我需要结果。