2016-04-15 2 views
4

Ich habe einen 2-D-Tensor:Wie extrahiert man n 1-D Tensoren aus einem gegebenen 2-D Tensor?

a = [[6, 5, 4], [3, 2, 1], [1, 2, 3], [4, 5, 6] [7, 8, 1], [5, 2, 6]]

ich möchte zufälligund keine Wiederholung K 1-D Tensoren extrahieren. Als nächstes wird sie in einer anderen 2-D-Tensor b Kombination:

b = [5, 2, 6], [3, 2, 1], [6, 5, 4]

I keine Funktionen finden dies zu tun, so realisiere ich es als Gebrüll:

rand_var_1 = tf.random_crop(a, size=[1, 3], seed=1) 
rand_var_2 = tf.random_crop(a, size=[1, 3], seed=2) 
rand_var_3 = tf.random_crop(a, size=[1, 3], seed=3) 
rand_var_4 = tf.random_crop(a, size=[1, 3], seed=4) 
b = tf.concat(0, [rand_var_1, rand_var_2, rand_var_3, rand_var_4]) 

b_rs = sess.run(b) 
print "b_rs:\n",b_rs 

aber das Ergebnis hat sich wiederholende 1-D-Tensor wie:

bb = [[5, 2, 6] , [3, 2, 1], [5, 2, 6]]

Könnte bitte jemand mir helfen, das zu beheben?

+0

Nicht sicher, ob dies mit tensorflow funktionieren würde , aber mit NumPy-Arrays könnte es implementiert werden mit: 'a [np.random.choice (a.shape [0], 3, replace = False)]'. – Divakar

+0

Dies funktioniert nicht in Tensorflow, aber ich habe beschlossen, dies zu versuchen: 'a_shuffled = tf.random_shuffle (a, Samen = 12), b = tf.slice (a_shuffled, [0, 0], [K, len (a [0])]) ', ich denke, sie machen das gleiche bis zu einem gewissen Punkt. Wie auch immer, danke für deine freundliche Hilfe :). –

Antwort

2

Die folgende funktionieren soll, im Grunde eine Reihe von Zahlen, die die Länge des Array a, mischen sie erzeugen und die ersten K zu Index verwenden, und die Zeilen zu erhalten,

import numpy as np 

#Number of samples 
K = 3 

#Array 
a =[[6, 5, 4], [3, 2, 1], [1, 2, 3], [4, 5, 6], [7, 8, 1], [5, 2, 6]] 
N = len(a) 

#Get an array on size of a, shuffle and take first K to use 
#permutation used as suggested by @EelcoHoogendoorn 
indices = np.random.permutation(N) 

#Take the first k samples 
samples = indices[:K] 
b = [a[i] for i in samples] 

#Print 
print('a = ', a) 
print('b = ', b) 
+0

numpy.random.permutation macht das gleiche, aber kompakter –

+0

Syntax wird etwas netter, wenn Sie ein numpy Array anstelle einer Liste von lits verwenden ('b = a [samples]'), aber ja, das scheint zu sein der offensichtliche Ansatz, +1. – Jaime

+0

Guter Punkt @EelcoHoogendoorn, ich habe wie vorgeschlagen die Permutation geändert. Danke @Jaime, ich stimme zu und benutzte 'numpy' Arrays für' a'/'b' ursprünglich, aber da OP eine Liste verwendet, schien es sinnvoll, das gleiche Format beizubehalten ... –

Verwandte Themen