브로드 캐스팅(Broadcasting) |
- 브로드 캐스팅이 아닌 방법으로 행렬 연산하기1
>>> import numpy as np
>>> x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
>>> v = np.array([1,0,1])
>>> y = np.empty_like(x) # x의 모양(4,3)과 같은 행렬을 만들어준다.
>>> for i in range(4):
... y[i,:] = x[i,:] + v
...
>>> print y
[[ 2 2 4]
[ 5 5 7]
[ 8 8 10]
[11 11 13]]
x행렬과 v행렬초기화했을때 구조이다.
for문에서 y에 값을 넣는 방식이다.
- 브로드 캐스팅이 아닌 방법으로 행렬 연산하기2
>>> vv = np.tile(v,(4,1)) # v행렬을 4개의 행, 1개의 열로 만들어 vv에 넣어준다.
>>> print vv
[[1 0 1]
[1 0 1]
[1 0 1]
[1 0 1]]
>>> y = x + vv # x와 vv는 같은 shape이므로 연산 가능하다.
>>> print y
[[ 2 2 4]
[ 5 5 7]
[ 8 8 10]
[11 11 13]]
tile함수는 v행렬을 세로로 4개 가로로 1개 놓아주게한다.
- 브로드 캐스팅을 이용한 행렬 연산
>>> y = x + v # 단순히 연산만 해주면 자동으로 브로드 캐스팅된다.
>>> print y
[[ 2 2 4]
[ 5 5 7]
[ 8 8 10]
[11 11 13]]
브로드캐스팅할때는 연산할 두 행렬의 차수에 유의해야한다.
예를 들어, 4 by 3 행렬과 1 by 3 행렬은 브로드 캐스팅이된다. 하지만 4 by 3 행렬과 1 by 2 행렬은 브로드 캐스팅이 불가능하다.
각 차원에서 차수가 같거나 1이 어야한다.
3차원 행렬 4 X 3 X 2와 1 X 5 X 2는 브로드캐스팅이 되지않지만
4 X 3 X 2와 1 X 1 X 2는 가능하다.
>>> import numpy as np
>>> v = np.array([1,2,3])
>>> w = np.array([4,5])
>>> print np.reshape(v,(3,1)) * w
[[ 4 5]
[ 8 10]
[12 15]]
>>> x = np.array([[1,2,3],[4,5,6]])
>>> print x+v
[[2 4 6]
[5 7 9]]
>>> print (x.T + w).T
[[ 5 6 7]
[ 9 10 11]]
>>> print x + np.reshape(w,(2,1))
[[ 5 6 7]
[ 9 10 11]]
>>> print x * 2
[[ 2 4 6]
[ 8 10 12]]
np.resape(v,(3,1)) 함수는 [1,2,3]를
[ [1]
[2]
[3] ]
으로 만들어준다.
'FALL in > G.MA's 파이썬' 카테고리의 다른 글
[파이썬 Numpy] - 배열 수학 (0) | 2016.03.28 |
---|---|
[파이썬 Numpy] - 데이터 타입 (0) | 2016.03.28 |
[파이썬 Numpy] - 배열 인덱싱 (0) | 2016.03.28 |
[파이썬 Numpy] - 배열 (1) | 2016.03.28 |
[파이썬 클래스] (0) | 2016.03.26 |