본문 바로가기
AI/- Library

[Numpy] ndarray 인덱싱, 슬라이싱, 정렬

by Yoojacha 2023. 2. 16.

Normal indexing

matrix = np.random.randint(1,10, (4,4))
print(matrix)
"""
[[4 6 2 6]
 [2 4 2 6]
 [7 2 6 1]
 [8 1 4 1]]
"""

# 기존 파이썬 인덱싱 방법
print(f'{matrix[0]} {matrix[0][1]}') # [4 6 2 6] 6

# [행, 열] 표기법
print(f'{matrix[1][3]} {matrix[1, 3]}') # 6 6

# [...] 표기법 가능
print(matrix[1:3, 2:5])
print(matrix[1, ...])   
print(matrix[1,:])
"""
[[2 6]
 [6 1]]
[2 4 2 6]
[2 4 2 6]
"""

Boolean indexing & Fancy indexing

bools = np.array([True, True, False, False])
print(matrix[1,:][bools]) # [2 4]
print(matrix[1,:][~bools]) # not 붙인 효과, [2 6]

# boolean indexing
matrix = np.random.randint(1, 10, (5, 5))
new_matrix = matrix[ matrix > 7]
print(new_matrix) # [8 8 9]

# boolean indexing
new_matrix = matrix[ matrix % 2 == 0 ] # 짝수 값만 배열 반환
print(new_matrix) # [8 6 2 6 2 6 4 8 2 4 2 4 6]

# boolean indexing 으로 값 변경
matrix[ matrix < 0 ] = 0
matrix[ matrix % 2 == 1 ] = -2


# fancy indexing
print(matrix[[0, 2]])
"""
[[4 8 8 3 6]
 [9 6 1 4 4]]
"""

조건에 따른 값 지정

# np.where(condition, true_return, false_return) 
print(np.where(matrix > 5, 1, 0)) # true일 때, false일 때 삽입할 값 지정 가능
print()

# 조건에 맞는 값의 인덱스를 오름차순 반환
print(np.argwhere(matrix > 5))

정렬

x = np.random.randint(1, 20, 16).reshape(4,4)
print(x)
print(np.sort(x, axis=0)) 
print(x.sort(axis=0))
print(x)
"""
[[10  9 10  5]
 [ 9 19  5 13]
 [ 4 18  8 13]
 [ 9 15 15 17]]

[[ 4  9  5  5]
 [ 9 15  8 13]
 [ 9 18 10 13]
 [10 19 15 17]]

None

[[ 4  9  5  5]
 [ 9 15  8 13]
 [ 9 18 10 13]
 [10 19 15 17]]
"""
x = np.random.randint(1, 20, 16).reshape(4,4)
print(x)
# 정렬했을 때의 순서 인덱스를 반환
print(np.argsort(x)) # 기본값 axis=1
print(np.argsort(x, axis=0))
print(np.argsort(x, axis=None)) # flatten 된 배열의 인덱스를 반환

"""
[[17 15 16 18]
 [17 15 15 12]
 [16  5  1  8]
 [ 2  3 11 19]]

[[1 2 0 3]
 [3 1 2 0]
 [2 1 3 0]
 [0 1 2 3]]

[[3 3 2 2]
 [2 2 3 1]
 [0 0 1 0]
 [1 1 0 3]]

[10 12 13  9 11 14  7  1  5  6  2  8  0  4  3 15]
"""

전치행렬

x = np.random.randint(1, 20, 16).reshape(4,4)

# 행렬의 내적(inner product) 구할 때 필요
# 3 가지 모두 전치행렬 transpose matrix(aT)로 사용가능
# 3차원 배열도 가능!
print(x)
print(x.T)
print(np.transpose(x))
print(x.transpose())

"""
[[ 8  8  4  7]
 [ 2  9 18 14]
 [11 16  1  4]
 [18  8  8 15]]

[[ 8  2 11 18]
 [ 8  9 16  8]
 [ 4 18  1  8]
 [ 7 14  4 15]]

[[ 8  2 11 18]
 [ 8  9 16  8]
 [ 4 18  1  8]
 [ 7 14  4 15]]

[[ 8  2 11 18]
 [ 8  9 16  8]
 [ 4 18  1  8]
 [ 7 14  4 15]]
"""

'AI > - Library' 카테고리의 다른 글

[ Pandas ] 시계열 데이터  (0) 2023.02.17
[Pandas] 연산 방법 정리  (0) 2023.02.16
[Numpy] 연산 방법 정리  (0) 2023.02.16
[Pandas] 데이터 전처리 기초 정리  (0) 2023.02.16
[Pandas] - 기초, 인덱싱  (0) 2023.02.15
[Numpy] ndarray 생성, 추가, 수정, 삭제  (0) 2023.02.11

댓글