2016-07-22 6 views
3

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は要素ごとにしか動作しないようです。

答えて

4

利用放送:

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'sの左側にと小さい形状になります。これは、tf.range(5)のような1Dリストが行ベクトルとして扱われ、[tf.range(5)]に相当することを意味します。

+0

ありがとうYaroslav、これは完璧です!これは 'tf.tile'を使うのとまったく同じですか、あるいはもっと効率的なブロードキャストを使っていますか? – Hooked

+0

タイルのようにメモリ内のデータを実際に複製するのではなく、より効率的です –