如何从给定的二维张量中提取n个一维张量



我有一个二维张量:

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

我想提取K个1-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

但结果具有重复的一维张量类:

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

有人能帮我修一下吗?

以下操作应该有效,基本上生成一个长度为数组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)

最新更新