2017-05-16 2 views
0

betreibt Ich habe einen 2-D Tensor A mit Form (m, n), aber m und n sind unbekannt. z.B. A = [[1,2,3], [4,5,6]], hier m = 2 und n = 3. Nach meiner Operation möchte ich B = [[1,20,3], [4,5,60]] bekommen. Der Betrieb ist wie folgt:Wie man einige Elemente in einem 2-D Tensor mit dynamischer Dimension in TensorFlow

1) Sortieren aller Elemente in A mit absteigender Reihenfolge: 6,5,4,3,2,1

2) 6 auswählen, die Zeile 2 und Spalte 3 bedeutet, besetzt sind ;

3) 5,4 und 3 überspringen, weil Zeile 2 oder Spalte 3 bereits besetzt ist;

4) Wählen Sie 2, da Zeile 1 und Spalte 2 nicht belegt sind;

5) Halt, sind da alle Reihen besetzt (ähnlich für alle cols)

6) ausgewählte Elemente * 10

Antwort

0

Got Antwort nach mit meinem Freund ins Gespräch:

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 
Verwandte Themen