2017-05-16 18 views
0

我有一個形狀爲(m,n)的二維張量A,但是m和n是未知的。例如A = [[1,2,3],[4,5,6]],這裏m = 2和n = 3。手術後,我想得到B = [[1,20,3],[4,5,60]]。操作是這樣的:如何在TensorFlow中動態尺寸的二維張量中操作某些元素

1)中所述的排序的所有元素與降序排列:6,5,4,3,2,1

2)選擇6,這意味着行2和col 3被佔用;

3)跳過5,4和3,因爲行2或列3已被佔用;

4)選擇2,因爲行1和列2未被佔用;

5)停止,因爲所有行被佔用(同樣,對於所有的cols)

6)選擇的元素* 10

回答

0
和我的朋友商量後

得到了答案:

A=A-tf.reduce_min(A) 
mask=A*0 

def body(x,mask): 
a=x-tf.reduce_max(x) 
a=tf.sign(a)+1 
mask=mask+a 
where = tf.equal(x, tf.reduce_max(x)) 
indices = tf.where(where) 
indices = tf.cast(indices, "int32") 
col_slice=tf.slice(x, [0, indices[0][1]], [-1, 1]) 
col_slice=col_slice-tf.reduce_max(col_slice) 
col_slice=-tf.sign(col_slice) 
col_slice = tf.reshape(col_slice, [-1]) 
b=tf.matmul(tf.diag(col_slice),x) 
row_slice=tf.slice(x, [indices[0][0],0], [1,-1]) 
row_slice=row_slice-tf.reduce_max(row_slice) 
row_slice=-tf.sign(row_slice) 
row_slice=tf.reshape(row_slice,[-1]) 
c=tf.matmul(b,tf.diag(row_slice)) 
return (c,mask) 

def cond(x,mask): 
return tf.greater(tf.reduce_sum(x),0) 

_,final_mask=tf.while_loop(cond, body,(A,mask)) 
final_mask=final_mask*9+1 
B=A*final_mask 
相關問題