我是张量流初学者。我想知道如何对列表进行排序。
例如 [['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。
答案 0 :(得分:0)
tf.nn.top_k
返回排序值和索引以对值进行排序;因此,您可以首先通过对数字进行排序来获取索引,然后结合tf.gather
然后重新排序 s_name :
lst = [['s1',1],['s2',3],['s3',2]]
1)将s_names
和numbers
拆分为单独的列表,但保留订单
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)