2016-04-15 4 views
4

I 2次元テンソルを有する:与えられた2次元テンソルから1次元テンソルをどのように抽出するのですか?

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

IはK 1-Dテンソルランダムない繰り返しを抽出します。次に、別の2次元テンソルbにそれらを組み合わせる:

B = [5,2]、[6]、[3、2、1]、[6、5、4]

Iは

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 

のが、結果は以下のように反復1-Dテンソルを有する:これを行う任意の関数を見つけることはありませんので、私はベローズそれを実装

BB = [5,2]、[6] 、[3,2,1]、[5,2,6]]

この問題を解決するお手伝いをしてください。これはtensorflowで動作するかどう

+0

わかりませんNumPy配列では、 'a [np.random.choice(a.shape [0]、3、replace = False)]'で実装できます。 – Divakar

+0

これはテンソルフローでは機能しませんが、これを試してみることにしました: 'a_shuffled = tf.random_shuffle(a、seed = 12)、b = tf.slice(a_shuffled、[0、0]、[K、len( a [0])]) '、私は彼らがある点まで同じことをしていると思います。とにかく、あなたの親切な助けに感謝します:)。 –

答えて

2
以下は、基本的には、数字の配列をあなたの配列 aの長さを生成し、それらをシャッフルして、インデックスの最初の Kを使用して行を取得動作するはず

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は同じことを行いますが、よりコンパクトになります –

+0

リットリスト( 'b = a [samples]')の代わりにnumpy配列を使用すると構文が少し良くなりますが、これはそうです明白なアプローチ、+1。 – Jaime

+0

良い点@EelcoHoogendoorn、私は推薦された順列に変更しました。ありがとう@Jaime、私は同意し、元々 'a' /' b'のnumpy配列を使用していましたが、OPがリストを使用するので、同じフォーマットを維持するのが妥当と思われました... –

関連する問題