tesorflow使用top_k和任何方式排序

时间:2017-09-05 01:37:54

标签: tensorflow

我是张量流初学者。我想知道如何对列表进行排序。

例如 [['s1',1],['s2',3],['s3',2]]< - 来自此列表 我可以对每个列表中的第一个索引进行排序,并在排序列表中获取第零个索引值吗?

[[ 'S1',1],[ 'S3',2],[ 'S2',3]]

依次打印 sess.run(...)#'s1,s3,s2'

★★★

  

s_name和number是张量。

     

s_name = tf.constant(,dtype = tf.string)#从csv文件中读取。

     

number =使用占位符

获取的值

尝试:

我使用'dic'

dic={}
dic[s_name]=number (number=1,2,3)

print dic

{1:"s1",3:"s2",2:"s3"}

我用'top_k'

dic_key=dic.keys()

sort_distance=tf.nn.top_k(dic_key, k=3,sorted=True).values
reverse_distance=tf.reverse(sort_distance,axis=[0])

session.run(reverse_distance) #print '1,2,3'

这会对数字进行排序,但我不知道如何获得与数字对应的s_name。

有什么办法吗? 它不一定是列表。 每个s_name都有一个数字。我想按数字排序并获得带有排序数字的s_name。

1 个答案:

答案 0 :(得分:0)

tf.nn.top_k返回排序值和索引以对值进行排序;因此,您可以首先通过对数字进行排序来获取索引,然后结合tf.gather然后重新排序 s_name

lst = [['s1',1],['s2',3],['s3',2]]

1)将s_namesnumbers拆分为单独的列表,但保留订单

s_names, numbers = zip(*lst)

2)用top_k对数字进行排序并检索索引

indices = tf.nn.top_k(numbers, k=len(numbers)).indices

3)使用索引重新排序s_names

s_names_sorted = tf.gather(s_names, indices[::-1])

会话运行给出:

sess.run(s_names_sorted)
Out[18]:
array([b's1', b's3', b's2'], dtype=object)