>

낮은 배열에서 높은 배열로 정렬하려는 배열이 있지만 숫자 대신 배열 이름 (G, F, H ...)을 반환하려고합니다. 어떻게해야합니까?

A=12.74087388       
B=12.48817861
C=12.31249807
D=12.95688859
E=12.49693343
F=11.51090636
G=10.16505019
H=11.99872655
Array=np.array([A,B,C,D,E,F,G,H])
sort=np.sort(Array)


  • 답변 # 1

    사전 사용 :

    d = dict(A=12.74087388,       
    B=12.48817861,
    C=12.31249807,
    D=12.95688859,
    E=12.49693343,
    F=11.51090636,
    G=10.16505019,
    H=11.99872655)
    
    

    값별로 정렬 :

    >>> sorted(d, key=d.get)
    ['G', 'F', 'H', 'C', 'B', 'E', 'A', 'D']
    
    

    또는 숫자를 유지하고 값을 기준으로 정렬 :

    from operator import itemgetter
    print(sorted(d.items(), key=itemgetter(1)))
    
    

    출력 :

    [('G', 10.16505019),
     ('F', 11.51090636),
     ('H', 11.99872655),
     ('C', 12.31249807),
     ('B', 12.48817861),
     ('E', 12.49693343),
     ('A', 12.74087388),
     ('D', 12.95688859)]
    
    

  • 답변 # 2

    @jonrsharpe가 지적했듯이 변수 이름은 해당 값의 속성이 아니므로 다르게 연결해야합니다. 가장 쉬운 방법은 다음과 같이하는 것입니다.

    my_array = [[12.74087388, 'A'], [12.48817861, 'B'], etc]
    my_sorted_array = sorted(my_array)
    my_sorted_named_array = [i[1] for i in my_sorted_array]
    
    

  • 답변 # 3

    이것은 의견에서 제안 된 사전 기반 솔루션입니다.

    lst = [12.74087388, 12.48817861, 12.31249807, 12.95688859,
           12.49693343, 11.51090636, 10.16505019, 11.99872655]
    d = dict(zip(list('ABCDEFGH'), lst))
    sorted_names = list(zip(*sorted(d.items(), key=lambda x: x[1])))[0]
    # ('G', 'F', 'H', 'C', 'B', 'E', 'A', 'D')
    
    

  • 답변 # 4

    문자가 중복 된 경우 사전 대신 튜플 목록을 선호한다고 가정합니다.

    data = [
      ('A', 12.74087388),
      ('B', 12.48817861),
      ('C', 12.31249807),
      ('D', 12.95688859),
      ('E', 12.49693343),
      ('F', 11.51090636),
      ('G', 10.16505019),
      ('H', 11.99872655)
    ]
    dt = np.dtype([('letter', np.unicode_, 1), ('num', np.float64)])
    arr = np.array(data, dtype=dt)
    arr.sort(order='num')
    
    

관련 자료

  • 이전 qt - Qt5의 Cuda 링크 오류
  • 다음 r - 데이터를 그룹화하는 새로운 열을 추가