개발 교육 일기

파이썬 교육 Day 25 -1(+ numpy 기초, ndarray, 슬라이싱, fancy indexing, boolean indexing, arange, range, argsort, broadcasting 등)

오이띠 2021. 4. 16. 09:01
728x90

오늘은 Numpy 실습을 했다. 

 

 

import numpy as np : numpy를 np로 간략하게

np.__version__ : numpy의 버전 확인

 

arr = np.array([1,2,3,4], dtype = int) : 데이터타입이 int형이고 ndarray타입의 리스트를 생성. 

arr.shape : (4, )인 것으로 1행 4열임을 알 수 있다. 

 

 

 

 

 

리스트 통째로 넣어 ndarray를 만들 수 있다. 

arr = np.array(myList, dtype = float): myList라는 파이썬 array를 이용넣어, nparray를 새로 만들었다. 

                                                myList의 데이터들은 정수지만, dtype=float로 설정해주어서, 

                                                array([1., 2., 3., 4.])이라는 결과가 나왔다. 1.은 1.0의 0을 생략한 것이다.

 

 

반대로, myList에 float형 값들을 넣고 dtype을 int로 하면 어떻게 될까? 아래 예시를 통해 확인 할 수 있다. 

 

참고로, myList = [2.7, 3.8, 4.6]를 넣어 돌리면, 반올림이 아니라 소숫점 아래는 그냥 버렸다는 것을 알 수 있다. 

 

 

다음으로, myList = [[1,2,3,4], [5,6,7,8]] 로 2행 4열의 리스트를 만들고, arr= np.array(myList2)에 넣어 ndarray로 만들었다. arr.shape값이 (2,4)가 출력된걸 보면, 2행 4열임을 알 수 있다. 

 

 

 

 

이번엔 myList에 [1, 3.14, 'hello_world', '1234']로, 정수, 실수, 문자열 데이터를 모두 넣어보았다. 그리고 ndarray로 바꾼후 출력했더니, dtype이 'U32'가 나왔다. 

 

 

 arr[0]+arr[1]= '1'+'3.14'로 문자열을 더해준거다. 따라서, '13.14'라는 값이 나온다. 

 

 

 

 

 

 

 

 

 

 

 

이번엔 슬라이싱(Slicing)예제를 보자. 

위에서 arr[10]에서 IndexError가 난 이유는, arr의 인덱스는 0~9까지만 있기 때문이다. 

 

 

arr[-1]은 맨 뒤 숫자를 의미한다. 즉, 인덱스에 -를 붙이면 뒤에서부터 센다. 

arr[-11]에서 IndexError가 난 이유는 마이너스로 된 인덱스는 -1 에서 -10까지 있기 때문이다. 

 

 

 

 

arr2d는 3행 4열짜리 2차원 배열이다. 

 

 

이번엔 array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])를 다른 방법으로 정의해 보았다. 

np.arange(1,13)으로 1~12까지의 수를 만들고, np.array로 [1,2,3,4,5,6,7,8,9,10,11,12]인 리스트를 만들었다. 마지막으로, reshape(3,4)를 이용해, 3행 4열 2차원 배열로 만들었다. 

이때, reshape함수를 쓰려면 데이터수를 맞춰주는게 중요하다. 여기서는 reshape(3,4)를 쓰려면 3행 4열이므로 데이터 수가 12여야한다. 

 

 

 

 

arr2d[0,2]는 arr2d라는 2차원 배열의 0행 2열값을 출력한다. 

 

 

 

여기서는 슬라이싱(slicing)을 보여준다. 

arr1d = array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])에서 인덱스는 0~11까지 있다. 

따라서, arr1d[1: ]는 인덱스 1부터 끝까지를 의미하고, 출력값은 array([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])이다. 

또한, arr1d[1:10]은 인덱스가 1부터 9까지를 의미하고, 출력값은 array([2,3,4,5,6,7,8,9,10])이다. 

 

 

 

 

 

 

 

 

 

728x90