TensorFlow中的外部加减法

4
是否有与numpy外部函数类似的操作(或一系列操作)?
import numpy as np

a = np.arange(3)
b = np.arange(5)

print np.subtract.outer(a,b)

[[ 0 -1 -2 -3 -4]
 [ 1  0 -1 -2 -3]
 [ 2  1  0 -1 -2]]

显然,tf.sub似乎只对每个元素进行操作。
1个回答

9
使用广播:
sess.run(tf.transpose([tf.range(3)]) - tf.range(5))

输出

array([[ 0, -1, -2, -3, -4],
       [ 1,  0, -1, -2, -3],
       [ 2,  1,  0, -1, -2]], dtype=int32)

更具体地说,给定数组 (3, 1)(1, 5),广播在数学上等同于将数组平铺成匹配的 (3, 5) 形状并逐点进行操作。

enter image description here

这种平铺是通过循环现有数据来实现的,因此不需要额外的内存。当给出形状不相等的秩,例如(3, 1)(5)时,广播将在左侧1填充较小的形状。这意味着像tf.range(5)这样的一维列表被视为行向量,并且等同于[tf.range(5)]

谢谢Yaroslav,这太完美了!这个方法和使用tf.tile是完全等价的吗?还是说这种方式使用广播更高效? - Hooked
它更高效,不像tile一样实际上不会在内存中复制数据。 - Yaroslav Bulatov
这个操作可能有什么数学符号表示法?我的意思是将列向量[0、1、2]铺砌成3x4矩阵[0、0、0、0; 1、1、1、1; 2、2、2、2]。 - linello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接