Ndarray의 각 축에는 인덱스 번호가 존재하며, 저장된 특정 데이터 위치는 이러한 인덱스를 통해 접근할 수 있습니다.
데이터 인덱싱할 때 입력해야 하는 인덱스의 값은 차원의 개수만큼 늘어납니다.
인덱싱을 통한 조회 방법
1차원 : 배열명 [ index_x ]
2차원 : 배열명 [ index_x, index_y ]
3차원 : 배열명 [ index_x, index_y, index_z ]
<실습코드>
import numpy as np
'''
# 1차원 샘플 데이터 생성
'''
sample = np.arange(5,15)
print('1D-Array Sample:', sample)
print('sample[3] = ', sample[3])
'''
# 인덱싱 값 변경 후 출력
'''
sample[3]=0
print('1D-Array Sample:', sample)
'''
# 2차원 샘플 데이터 생성
'''
sample = np.arange(16).reshape((4,4))
print('\n2D-Array Indexing')
print(sample)
print('sample[2,3] = ', sample[2,3])
'''
# 인덱싱 값 변경 후 출력
'''
sample[2,3]=0
print(sample)
'''
# 3차원 샘플 데이터 생성
'''
sample = np.arange(16).reshape((4,2,2))
print('\n3D-Array Indexing')
print(sample)
print('sample[1,1,1] = ', sample[1,1,1])
<실행결과>
1D-Array Sample: [ 5 6 7 8 9 10 11 12 13 14]
sample[3] = 8
1D-Array Sample: [ 5 6 7 0 9 10 11 12 13 14]
2D-Array Indexing
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
sample[2,3] = 11
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 0]
[12 13 14 15]]
3D-Array Indexing
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]
[[12 13]
[14 15]]]
sample[1,1,1] = 7
NumPy 의 슬라이싱은 Ndarray 내 특정 범위를 지정하여 데이터를 조회하는 방식으로 범위 지정을 위해 인덱스를 활용합니다.
배열명 [ from start : to stop ]
from start
to stop
Negative Index 란 ?
2차원 ndarray를 슬라이싱하는 경우 행과 열의 조건을 따로 주어야 합니다.
<실습코드>
import numpy as np
# 1차원 샘플 데이터 생성
sample = np.arange(5,15)
print('1D-Array Sample')
print(sample)
'''
# 슬라이싱 실습
'''
print('\nSlicing')
print(sample[2:5])
print(sample[:5])
print(sample[7:])
print(sample[2:-1])
print(sample[:])
# 2차원 샘플 데이터 생성
sample = np.arange(1,17).reshape(4,4)
print('\n2D-Array Sample')
print(sample)
'''
# 슬라이싱 실습
'''
print('\nSlicing')
print(sample[1:3,1:3])
print(sample[:3,0:1])
print(sample[3:,:])
print(sample[:,2])
print(sample[:,:])
'''
# Negative Index 활용한 슬라이싱 실습
'''
print('\nSlicing by Negative Index')
print(sample[:, 1:-1])
print(sample[:-1, -2])
print(sample[:, -1])
<실행결과>
1D-Array Sample
[ 5 6 7 8 9 10 11 12 13 14]
Slicing
[7 8 9]
[5 6 7 8 9]
[12 13 14]
[ 7 8 9 10 11 12 13]
[ 5 6 7 8 9 10 11 12 13 14]
2D-Array Sample
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
Slicing
[[ 6 7]
[10 11]]
[[1]
[5]
[9]]
[[13 14 15 16]]
[ 3 7 11 15]
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
Slicing by Negative Index
[[ 2 3]
[ 6 7]
[10 11]
[14 15]]
[ 3 7 11]
[ 4 8 12 16]
NumPy 는 Ndarray 내 저장된 데이터의 정렬을 위한 다음과 같은 함수를 제공합니다.
np.sort(array)
정렬된 결과를 반환하지만, 원본 데이터는 변경하지 않음
원본 데이터를 변경하려면 호출 순서를 다음과 같이 작성하면 됨
- ndarray.sort() : 원본 데이터를 변경하고 none 값을 반환(써도 되지만, 원본데이터는 바꾸지 않는것이 좋습니다)
np.sort() 활용한 내림차순 정렬 방법
1) np.sort() 를 통해 오름차순 정렬하여 저장
2) 오름차순 정렬된 배열을 역순으로 출력 [::-1]
2차원 ndarray를 정렬할 때는 axis를 통해 집계 방향을 결정해야 합니다.
np.sort(array,axis)
다음은 입력한 배열을 오름차순으로 정렬한 뒤 배열의 인덱스 값들만 반환하는 함수입니다.
np.argsort(array)
<실습코드>
import numpy as np
# 샘플 데이터 생성
sample = np.array([2,5,8,1])
print('1D-Array Sample')
print(sample)
'''
# np.sort() 정렬
'''
result = np.sort(sample)
print('\nResult of np.sort')
print('Result :', result)
print('Original :', sample)
'''
# [::-1] 실습
'''
print('\nTest[::-1] ')
print('Original :', sample)
print('Result :', sample[::-1])
'''
# 내림차순 정렬
'''
sort_arr = np.sort(sample)
result = sort_arr[::-1]
print('\nDcending Order')
print('Dcending :', result)
'''
# 샘플 데이터 생성
'''
sample = np.array([[9,11],[5,1]])
print('\n2D-Array Sample')
print(sample)
'''
# 2차원 배열 정렬 by axis=0
'''
result = np.sort(sample,axis=0)
print('\nnp.sort(axis=0) :')
print(result)
'''
# 2차원 배열 정렬 by axis=1
'''
result = np.sort(sample,axis=1)
print('\nnp.sort(axis=1) :')
print(result)
'''
# 샘플 데이터 생성
'''
name = np.array(['John','Samuel','Kate','Mike','Sarah'])
score = np.array([78,84,96,88,82])
'''
# np.argsort() 통해 정렬된 인덱스 값만 반환
'''
sort_indexes = np.argsort(score)
print('\nnp.argsort()')
print('sort indexes :', sort_indexes)
'''
# 인덱스 값을 통해 컬럼명 조회
'''
print('sort values :', name[sort_indexes])
<실행결과>
1D-Array Sample
[2 5 8 1]
Result of np.sort
Result : [1 2 5 8]
Original : [2 5 8 1]
Test[::-1]
Original : [2 5 8 1]
Result : [1 8 5 2]
Dcending Order
Dcending : [8 5 2 1]
2D-Array Sample
[[ 9 11]
[ 5 1]]
np.sort(axis=0) :
[[ 5 1]
[ 9 11]]
np.sort(axis=1) :
[[ 9 11]
[ 1 5]]
np.argsort()
sort indexes : [0 4 1 3 2]
sort values : ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']