기본적으로 numpy에서 연산을 할때 크기가 서로 동일한 배열(Array)끼리 연산이 진행된다.

다음 예를 살펴보자.

 

우선 두개의 배열을 생성하자.

 

np_arr1=np.array([[1,2,3],[3,4,5]])
print(np_arr1)
print(np_arr1.shape)
np_arr2=np.array([[10,11,12],[12,13,14]])
print(np_arr2)
print(np_arr2.shape)

[[1 2 3]
 [3 4 5]]
 
(2, 3)

[[10 11 12]
 [12 13 14]]

(2, 3)

덧셈

np_arr1+np_arr2

array([[11, 13, 15],
       [15, 17, 19]])

뺄셈

np_arr1-np_arr2

array([[-9, -9, -9],
       [-9, -9, -9]])

곱셈

np_arr1*np_arr2

array([[10, 22, 36],
       [36, 52, 70]])

나눗셈

np_arr1/np_arr2

array([[0.1       , 0.18181818, 0.25      ],
       [0.25      , 0.30769231, 0.35714286]])

브로드캐스트(BroadCast)

위에서는 배열(Array)가 같은 크기를 가져야 서로 연산이 가능하다고 했다.

하지만 넘파이에서는 브로드캐스트라는 기능을 제공해준다.

브로드캐스트란 서로 크기가 다른 array가 연산이 가능하게끔 하는 것이다.

 

print(np_arr1)
print(np_arr1.shape)

[[1 2 3]
 [3 4 5]]
(2, 3)
np_arr3=np.array([10,11,12])
print(np_arr3)
print(np_arr3.shape)

[10 11 12]
(3,)
#덧셈 broadcast
np_arr1+np_arr3

array([[11, 13, 15],
       [13, 15, 17]])

#뺄셈 broadcast
np_arr1-np_arr3

array([[-9, -9, -9],
       [-7, -7, -7]])

#곱셈 boradcast
np_arr1*np_arr3

array([[10, 22, 36],
       [30, 44, 60]])
       
#나눗셈 broadcast
np_arr1/np_arr3

array([[0.1       , 0.18181818, 0.25      ],
       [0.3       , 0.36363636, 0.41666667]])

위와 같이 서로 shape가 다른 np_arr1,np_arr3의 연산이 가능하다.

위 결과를 살펴보면 np_arr3이 [10,11,12]에서 [[10,11,12],[10,11,12]]로 확장되어 계산됨을 확인할 수 있다.

 

또한 배열(Array)에 스칼라 연산도 가능하다.

 

np_arr1*10

array([[10, 20, 30],
       [30, 40, 50]])
       
np_arr1**10

array([[      1,    1024,   59049],
       [  59049, 1048576, 9765625]], dtype=int32)

 

'Data analysis > Numpy' 카테고리의 다른 글

5. Array boolean 인덱싱(마스크)  (0) 2021.03.19
4. Array 인덱싱  (0) 2021.03.19
2. zeros(),ones(),arange() 함수  (0) 2021.03.19
1.Numpy란?  (0) 2021.03.19
배열(Array) 과 리스트(List)의 정의 및 차이점  (0) 2021.03.19

+ Recent posts