지난 포스팅 에서는 ndarray 를 활용한 기본적인 데이터 변황에 대해서 살펴 보았습니다.
2020/05/10 - [Programming/Python] - [Numpy] ndarray 기본 및 데이터 타입 변환하기
이번 포스팅에서는 ndarray 를 통한 행현환 , 인덱싱, 정렬 기능을 사용해 보고자 합니다.
인덱싱
인덱싱 기능으로 살펴볼 내용을 아래와 같습니다.
특정한 데이터만 추출 : 인덱스 값을 지정하면 해당 위치의 데이터가 반환
슬라이싱 : 연속된 인덱스상의 ndarray 를 추출
팬시 인덱싱 : 일정한 인덱싱 집합을 ndarray 형태로 지정해 해당위치 데이터의 ndarray를 반환
불린 인덱싱 : 특정 조건에 해당하는지 여부인 true/false값 인덱싱 집합을 기반으로 true 에 해당하는 인덱스 위치에 있느느 데이터의 ndarray를 반환
우선 np.arange() 를 통해 1~9 까지 배열을 하나 생성합니다.
#input
array1 = np.arange(start=1, stop=10)
array1
#output
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
이제 데이터를 추출해 보겠습니다.
인덱스는 0 부터 시작이르므로 array1 [2] 는 3번째 인덱스 위치의 값을 의미합니다.
#input
value = array1[2]
value
#output
3
데이터 값의 수정도 가능합니다.
0번과 8번 인덱스의 값을 변경하면 다음과 같이 변경된 데이터가 출력됩니다.
#input
array1[0]=9
array1[8]=0
array1
#output
array([9, 2, 3, 4, 5, 6, 7, 8, 0])
이번에는 1차원 데이터를 2차원 데이터로 변경 한 후 데이터를 추출해 보겠습니다.
reshape() 함수를 활용하여 3X3 의 2차원 데이터로 변경합니다.
이후 2차원 데이터에서 로우와 컬럼을 지정하면 해당 데이터가 추출되는 것을 확인 할 수 있습니다.
#input
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
print('array1d :', array1d)
print('array2d :\n', array2d)
#output
array1d : [1 2 3 4 5 6 7 8 9]
array2d :
[[1 2 3]
[4 5 6]
[7 8 9]]
#input
print('row0, col0 :', array2d[0,0]) #row0, col0
print('row0, col2 :', array2d[0,2]) #row0, col2
print('row1, col1 :', array2d[1,1]) #row1, col1
print('row2, col2 :', array2d[2,2]) #row2, col2
#output
row0, col0 : 1
row0, col2 : 3
row1, col1 : 5
row2, col2 : 9
슬라이싱
':' 기호를 사용하면 연속한 데이터를 슬라이싱 하여 추출할 수 있습니다.
#input
array1 = np.arange(1,10)
array1
#output
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
#input
array3 = array1[0:3] # array1 에서 0 ~ (3-1) 까지의 데이터 추출
print(array3)
print(type(array3))
#output
[1 2 3]
<class 'numpy.ndarray'>
이때 시작, 종료 인덱스 값은 생략이 가능합니다.
생략된 경우 시작 인덱스는 첫번째 인덱스 , 종료 인덱스는 마지막 인덱스가 적용 되어
array3 = array1[:] 이렇게 지정할 경우 전체 인덱스가 모두 추출됩니다.
2차원 ndarray 슬라이싱은 1차원 슬라이싱과 동일하나 콤마(,)를 사용해 로우와 칼럼 인덱스를 지칭합니다.
우선 2차원 데이터로 변환한 후 로우와 컬럼을 지정하여 데이터를 추출해 보겠습니다.
지정된 row 와 col 값으로 데이터가 추출되는 것을 확인 할 수 있습니다
#input
array2d = array1d.reshape(3,3)
array2d
#output
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
#input
print(array2d[0:2, 0:2]) #row 0,1 col 0,1
print('\n')
print(array2d[1:3, 0:3]) #row 1,2 col 0,1,2
print('\n')
print(array2d[1:3, : ]) #row 1,2 col 0,1,2
print('\n')
print(array2d[ : , : ]) #row 0,1,2 col 0,1,2
#output
[[1 2]
[4 5]]
[[4 5 6]
[7 8 9]]
[[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]
정렬
정렬 기능은 sort() 함수를 사용합니다.
테스트를 위한 array 를 다음과 같이 생성합니다.
#input
array = np.array([3,1,9,5])
array
#output
array([3, 1, 9, 5])
numpy 에서 sort 함수를 사용하면 정렬된 데이터를 반환합니다.
하지만 ndarray.sort() 를 사용한 경우에는 원본 행렬을 자체를 정렬된 값으로 변환하게 되어 아래와 같이
array2 는 아무런 값도 반환하지 않고 array 값 자체가 변경된걸 확인 할 수 있습니다.
#input
array_sort = np.sort(array)
array_sort
#output
array([1, 3, 5, 9])
#input
array_sort2 = array.sort()
array_sort2
#output
none
#input
array
#output
array([1, 3, 5, 9])
내림차순 정렬은 [::-1] 을 사용합니다.
#input
array_desc = np.sort(array)[::-1]
array_desc
#output
array([9, 5, 3, 1])
2차원 행렬인 경우 로우 또는 컬럼 방향으로 정렬을 진행 합니다.
axis=0 : 로우 기준 정렬
axis=2 : 컬럼 기준 정렬
#input
array2d = np.array([[8,12],[7,1]])
array2d
#output
array([[ 8, 12],
[ 7, 1]])
#input
array2d_axis0 = np.sort(array2d, axis=0)
array2d_axis0
#output
array([[ 7, 1],
[ 8, 12]])
#input
array2d_axis1 = np.sort(array2d, axis=1)
array2d_axis1
#output
array([[ 8, 12],
[ 1, 7]])
참고 : 파이썬 머신러닝 완벽가이드 github.com/wikibook/pymldg-rev
'Programming > Python' 카테고리의 다른 글
Pandas 데이터 핸들링 방법 살펴보기 (0) | 2020.05.29 |
---|---|
pandas 로 엑셀 파일 읽어올 때 한글이 깨질 경우, 한글 폰트 세팅하기 (0) | 2020.05.18 |
[Numpy] ndarray 기본 및 데이터 타입 변환하기 (0) | 2020.05.10 |
파이썬을 이용하여 웹 크롤러 만들기 #2 - BeautifulSoup4을 활용하여 크롤링하기 (0) | 2020.04.20 |
파이썬을 이용하여 웹 크롤러 만들기 #1 - Python 설치 및 환경 설정 (0) | 2020.04.20 |