본문 바로가기

Study/FastCampus

[Numpy] Numpy 행렬값 치환하기

728x90
반응형

[ 문  제 1 ]

1. 100 ~ 130 까지 랜덤한 숫자를 가지는 8*8 행렬을 만들고,

2. 3의 배수는 fiz, 5의 배수는 buz, 3과 5의 배수는 fbz 문자열로 치환


1. 100 ~ 130 까지 랜덤한 숫자를 가지는 8*8 행렬 만들기

import numpy as np

# random.randint(low, high=None, size=None, dtype=int)
datas = np.random.randint(100, 130, size=(8,8))
print(datas)

[[108 125 103 100 102 103 108 110]
 [118 110 105 106 109 121 112 106]
 [101 123 127 127 123 129 107 118]
 [114 113 129 108 127 107 103 117]
 [127 111 103 108 118 115 116 120]
 [109 107 104 106 109 103 126 115]
 [123 121 101 121 113 100 129 117]
 [122 121 102 106 102 110 110 115]]

 

2번을 수행하기 위해서는 행과 열을 반복하면서 조건에 해당하는지 확인 후 치환하는 방법이 있을 것이다.

 

다음으로는 특정 조건의 데이터를 선택 후 브로드캐스팅 하여 값을 대입하는 방법을 사용할 수 있겠다.

여기서 브로드캐스팅(Broadcasting)이라는 것은 단어 뜻에서와 같이 전파한다는 의미이다.

파이썬 numpy에서 말하는 브로드캐스팅은 일정 조건을 부합하는 다른 형태의 배열끼리 연산을 수행하는 것을 의미함.

 

idx_3 = datas % 3 == 0
idx_5 = datas % 5 == 0
idx_15 = datas % 15 == 0

result = datas.astype("str")
result[idx_3] = "fiz"
result[idx_5] = "buz"
result[idx_15] = "fbz"

print(result)

[['fiz' 'fiz' '119' '104' '127' 'fiz' 'fiz' 'fiz']
 ['107' '101' '121' '112' '109' 'fiz' 'fiz' '116']
 ['buz' 'buz' '109' 'buz' '127' '113' '113' '122']
 ['107' 'fbz' 'fiz' 'fiz' '118' 'fiz' 'fbz' '122']
 ['101' 'fiz' 'fiz' '107' 'fbz' 'fiz' 'fiz' '107']
 ['118' 'buz' '112' 'fbz' 'fiz' 'fbz' '121' '101']
 ['fbz' 'fiz' 'fbz' '122' '127' '103' 'fiz' 'fiz']
 ['buz' 'fbz' 'fiz' '106' '109' 'fiz' 'fiz' '109']]

 

[ 문  제 2 ]

1. 1 ~ 20 까지 랜덤한 숫자를 가지는 5*5 행렬 생성

2. 최대값에는 MAX, 최소값에는 MIN 문자열이 들어가도록 치환


import numpy as np

datas = np.random.randint(1, 20, size=(5,5))

min_num, max_num = np.min(datas), np.max(datas)

idx_max = datas == max_num
idx_min = datas == min_num

result = datas.astype("str")
result[idx_max] = "MAX"
result[idx_min] = "MIN"

print(result)
728x90
반응형