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]]
"""
댓글