1. 程式人生 > >兩個奇怪的TF索引操作和比較類函式

兩個奇怪的TF索引操作和比較類函式

tf.invert_permutation(x)

這是個奇怪的函式,之所以說奇怪,是因為學到目前為止,我還不清楚它有什麼用,這個函式的功能是這麼描述的:將x中元素的值當作索引,返回新的張量,用公式表達如下:

設張量X=[x1,x2,x3,…xn],那麼Y=tf.invert_permutation(X)=[yxi=i]
還是舉例說明吧:
設X=[3,2,0,1,4]
x0=3,x1=2,x2=0,x3=1,x4=4
yx0=y3=0
yx1=y2=1
yx2=y0=2
yx3=y1=3
yx4=y4=4
於是Y=[2,3,1,0,4]
tf.where(condition,x,y)
condition是一個元素為True或者False的張量,shape必須和x,y一致,當只有condition一個引數的時候,函式返回True的索引,比如tf.where([True,False,False,True])=[[0],[3]]。注意函式返回的是列向量。
當函式有x,y引數的時候,函式進行如下操作:產生一個和X,Y shape相同的張量,在這個張量(比如說是一個二維張量Z)中,zij

的值由conditionij決定,如果conditionij==True,那麼zij=xij,否則zij=yij
還是看一個例子吧:

x 2,2,3 4,5,6
condition True,False,False False,True,True
y 1,0,3 1,5,1
z=where(condition,x,y) 2,0,3 1,5,6