ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] numpy의 구조화된 배열
    언어/파이썬 & 장고 2022. 8. 15. 21:15

    여러 사람에 대한 다양한 데이터(이름, 몸무게, 나이 등등)이 있고 이러한 데이터를 저장하는 방법은 다음처럼 각각의 배열로 저장할 수 있습니다.

    name = ['kim', 'lee', 'park']
    age = [20, 30, 35]
    weight = [55.5, 70.0, 65.7]

    3개의 리스트의 연관성이 없어서 단일 구조의 데이터로 저장한다면 더 자연스럽게 사용할 수 있습니다. 일반적으로는 dictionary 타입으로 생성해 사용하지만 좀 더 효율적인 사용법이나 연산을 위해 numpy로 생성해 보도록 합니다.

    name = ['kim', 'lee', 'park']
    age = [20, 30, 35]
    weight = [55.5, 70.0, 65.7]
    
    import numpy as np
    
    data = np.zeros(3, dtype={'names': ('name', 'age', 'weight'), 'formats': ('U10', 'i4', 'f8')})
    print(data.dtype)
    # [('name', '<U10'), ('age', '<i4'), ('weight', '<f8')]
    
    data['name'] = name
    data['age'] = age
    data['weight'] = weight
    
    print(data)
    # [('kim', 20, 55.5) ('lee', 30, 70. ) ('park', 35, 65.7)]

    데이터가 하나의 편리한 메모리 블록에 함께 정렬돼 있습니다. 구조화된 배열의 편리한 점 중 하나는 값을 인덱스나 이름을 참조할 수 있습니다.

    # 전체 이름 가져오기
    print(data['name'])
    # ['kim' 'lee' 'park']
    
    # 데이터의 첫 번째 행 가져오기
    print(data[0])
    # ('kim', 20, 55.5)
    
    # 마지막 행의 이름 가져오기
    print(data[-1]['name'])
    # park
    
    # 나이가 30 이하인 이름 가져오기
    print(data[data['age'] < 30]['name'])
    # ['kim']

    이보다 더 복잡한 연산을 학 싶다면 pandas 패키지를 사용하는 것이 좋습니다. pandas는 지금까지 봤던 것과 유사한 numpy 배열 기반의 다양한 다양한 데이터 가공 기능을 훨씬 더 많이 가지고 있는 Dataframe 객체를 제공합니다.

    댓글