2017-09-05 1 views
0

저는 tensorflow 초보자입니다. 목록을 정렬하는 방법을 알고 싶습니다. 예를 들어tesorflow는 top_k와 어떤 식 으로든 사용하여 정렬합니다.

[ 'S1', 1], [ 'S2', 3], [ 'S3', 2] < --from리스트 는 I는 각리스트의 첫번째 인덱스를 정렬 얻을 수 소트리스트의 0 번째의 인덱스 치

[ 'S1', 1], [ 'S3', 2], [ 'S2', 3] 차례로

인쇄 sess.run (...) # 'S1, S3 , S2 '

★★★

s_name 및 번호 텐서입니다.

s_name = tf.constant (, dtype = tf.string) # csv 파일에서 읽기.

번호 = 값 틀을 사용하여 수득 하였다

보십시오

제가

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

인쇄 DIC

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

"DIC"사용하고 난 '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

tf.nn.top_k은 정렬 된 값과 인덱스를 반환하여 값을 정렬합니다.)

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

한 별도의 목록에서 s_namesnumbers을 분할하지만, 순서

s_names, numbers = zip(*lst) 
을 유지 : 그래서 당신이 먼저 그런 다음 s_name 순서를 변경할 수 있습니다 tf.gather과 결합 숫자를 정렬하여 인덱스를 얻을 수 있습니다

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) 
+0

당신을 감사합니다! [::-1] ! – ccc

관련 문제