본문 바로가기
Study/Python

Numpy 기본 함수 및 연산

by 까망우동 2023. 5. 26.
반응형

Numpy는 파이썬에서 배열(array)이라는 객체를 만들고, 이를 통한 선형대수 및 통계 연산을 하는데 매우 유용한 라이브러리이다. 

Index

    배열 혹은 행렬을 만드는 예시 

    array1 = np.array([1,2,3]) #array 함수는 입력된 객체를 Numpy 배열 형식으로 반환하는 함수
    print('array1 type:',type(array1)) # array 의 type 은 "numpy.ndarray" 이다. 
    print('array1 array 형태:',array1.shape) # 반환값 (3,)
    
    array3 = np.array([[1,2,3]])
    print('array2 type:',type(array3))
    print('array2 array 형태:',array3.shape) # 반환값 (1,3)
    
    array2 = np.array([[1,2,3],[2,3,4]])
    print('array2 type:',type(array2))
    print('array2 array 형태:',array2.shape) # 반환값 (2,3)

     

    arange 함수를 이용한 배열생성 및 reshape 활용 방법

    array1 = np.arange(1,9) #start 부터 stop 까지 균일간격으로 숫자 생성
    print('array:\n', array1, array1.shape) # 반환값: [1 2 3 4 5 6 7 8] (8,)
    
    array3d = array1.reshape((2,2,2))
    print('array3d:\n', array3d) # 3차원: 2행2열의 행렬 2개 생성
    
    array2d = array3d.reshape(-1,1) #reshape(-1,n) 의 의미는 n 은 고정하고 첫번째 차원의 크기를 자동으로 계산
    print('array2d:\n', array2d, array2d.shape) # (8행 1열짜리 2차원 행렬생성)

     

    배열(array)의 여러가지 인덱싱(indexing), 슬라이싱(slicing) 방법

    array3d = np.arange(1,10).reshape(3,3)
    print(array3d)
    print(array3d[1,2]) #인덱싱 :2행3열의 숫자 반환
    print(array3d[0:2,0:2]) #슬라이싱 
    print(array3d[1:,:]) #슬라이싱: 2,3행만 반환
    print(array3d[[1,0],1:3]) #팬시 인덱싱 : 리스트나 ndarray 로 인덱스 집합을 지정
    print(array3d[array3d>5], array3d>5, sep='\n')
    #불린 인덱싱 : [] 내에 조건문에 해당하는 값만 추출
    #첫번째는 5초과하는 원소들을 array형식으로 반환, 두번째는 5초과 여부를 T/F 불린으로 행렬반환

     

    배열/행렬의 정렬방법

    array = np.array([3,1,9,5])
    sort_array = np.sort(array) #원본 array 객체는 건들지 않음
    print(sort_array) #[1,3,9,5]
    sort_array2 = array.sort() #ndarray.sort() 는 반환값이 None이며, 대신 원본 ndarray 를 정렬해줌 
    print(sort_array2) # None
    sort_array3 = np.sort(array)[::-1] #내림차순 정렬
    print(sort_array3)
    
    array2 = np.array([[8,12]
                       ,[7,15]])
    array2s = np.sort(array2, axis=0) # 2차원 행렬의 정렬 axis 0=열, 1=행
    print(array2s) # 반환 [[7, 12], [8,15]]

     

    argsort() : 정렬된 행렬의 인덱스 반환하기 

    주어진 배열의 각 요소를 오름차순 정렬한 후, 각 요소의 기존 인덱스를 반환한다. 

    array = np.array([3,1,9,5])
    sort_index_array = np.argsort(array) #주어진 배열의 각 요소를 정렬한 후, 해당 요소의 기존 인덱스를 반환하는 함수입니다 
    print(sort_index_array) #[1,0,3,2]
    
    #argsort 활용예시 : 성적순으로 학생이름 출력하기 
    name = np.array(['맹구','짱구','영희','미선','네네','짱아'])
    score = np.array([99,92,67,94,35,97])
    score_index = np.argsort(score)
    print(score_index) [4 2 1 3 5 0]
    print(name[score_index]) # 점수 낮은 이름순서 정렬
    print(score[score_index], type(score_index), type(score))

     

    행렬 곱(내적)과 전치행렬 구하기

    A = np.array([[1,2,3],[4,5,6]])
    B = np.array([[7,8],[9,10],[11,12]])
    print(A,B, sep='\n')
    print(np.dot(A,B)) # 행렬 곱 
    print(np.transpose(A))
    반응형

    댓글