2016-04-15 153 views
4

我有一个2-d张量:如何从给定的二维张量中提取n个一维张量?

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

我想提取K 1-d张量随机无重复。接着,将它们组合到另一2-d张量B:

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

我没有找到这样的任何功能,所以作为波纹管实现:

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]]

可以请某人帮我解决这个问题吗?

+0

不知道这是否会与tensorflow工作,但是对于NumPy数组,它可以用'a [np.random.choice(a.shape [0],3,replace = False)]'来实现。 – Divakar

+0

这在tensorflow中不起作用,但我决定试试这个:'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

如果您使用numpy数组而不是lits列表('b = a [samples]'),语法会更好一些,但是,这似乎是明显的做法,+1。 – Jaime

+0

好点@EelcoHoogendoorn,我已经改变为建议的排列组合。谢谢@Jaime,我同意并最初为'a' /'b'使用'numpy'数组,但是由于OP使用列表,似乎明智地保持相同的格式... –

相关问题