배열과 스칼라에 서로 다른 사칙 연산을 조합해서 적용할 수 있다. 대각행렬을 하나 만들고 약간의 잡음(랜덤은 아닌)을 넣어 보자.
noise = np.eye(4) + 0.01 * np.ones((4, ))
noise
>>>
array([[ 1.01, 0.01, 0.01, 0.01],
[ 0.01, 1.01, 0.01, 0.01],
[ 0.01, 0.01, 1.01, 0.01],
[ 0.01, 0.01, 0.01, 1.01]])
그런데 작으면서도 랜덤인 잡음을 만들고 싶다면 어떻게 할까? ‘UNIT 47. 파이썬으로 통계 분석하기’에서 난수 생성기를 자세히 다룰 것이므로 여기서는 간략히 살펴보자.
noise = np.eye(4) + 0.01 * np.random.random([4, 4])
np.round(noise, 2)
>>>
array([[ 1.01, 0. , 0.01, 0. ],
[ 0.01, 1.01, 0. , 0.01],
[ 0. , 0. , 1. , 0. ],
[ 0. , 0. , 0.01, 1. ]])
여기서는 유니버셜(universal) 함수인 round()를 사용해서 행렬을 반올림했는데, 함수를 단 한 번만 호출해서 모든 아이템을 처리했다! 다음 UNIT에서 우리는 ufunc 마법사가 되어 볼 것이다.
* 대각행렬 왼쪽 위에서 오른쪽 아래로 향하는 대각선의 원소 외에는 모두 0인 정사각 행렬