관리 메뉴

FU11M00N

[ Numpy ] Numpy 배열 연산 본문

AI/Numpy

[ Numpy ] Numpy 배열 연산

호IT 2021. 3. 22. 20:52

- 배열 연산

Numpy는 배열끼리의 연산을 지원합니다.

언뜻 보면 규칙이 복잡하지만 잘만 사용하면 상당히 복잡한 기능도 배열끼리의 연산으로 간단히 구현가능합니다.

na1 = np.array( [[1,2],[3,4]] )  # shape : (2,2)
na2 = np.array( [[1,2]] ) # shape : (1,2)
na3 = np.array( [[1],[2]]) # shape : (2,1)

print( na1 + na2 ) 
print( na1 + na3 ) 

출력 값

 

 

 

Numpy 의 배열끼리의 연산은 같은 동일 차원(x축, y축등.. ) 길이가 같거나 또는 한쪽이 1일때 허용됩니다.

단 차원의 크기다 다를때는 앞의 차원은 1로 간주됩니다.

 

아래에는 서로 연산이 가능한 쉐이프의 예가 나와있습니다.

(2,2) + (2,)
(2,2) + (1,2) 
(2,2) + (2,1)
 
(3,1) + (1,2)
 
(1,2,3) + (1,2,1)
(1,2,3) + (1,1,3)
(1,2,3) + (1,2,3)
(1,2,3) + (2,3)
(1,2,3) + (1,3)
(1,2,3) + (3,)
 

이는 3차원 이상의 배열에서도 유효하다. 차원의 크기가 다를 경우 앞쪽은 1로 계산합니다.

 

예시 

(4,3,2) + (3,1)  = (4,3,2) + (1,3,1)
na1 = np.full((4,3,2),2)
na2 = np.full((1,2),2)

print( na1 + na2 ) 

출력 값

 

x1,x2 = np.array([0,1,2]), np.array([[1],[2],[3],[4]]) 
print(x1)
print(x2)
print(x1 + x2)

출력 값

-  문제 : 구구단 행렬 만들기

 

a=np.arange(1,10,1)
b= np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9]])

print(a)
print(b)

print(a*b)

출력 값

 

 

- 문제: (n,) 두개를 (n,2) 로 합치기

arr1= np.array([1,2,3,4,5,6]).reshape(6,1) 
arr2 =np.array([0,10,20,30,40,50]).reshape(6,1)
print(arr1 * np.array([1,0])+arr2 * np.array([0,1]))

출력 값

 

- in 그래프의 2차원화

- 문제 : 다음 0부터 np.pi 까지의 sin 곡선과 같은 비율로 밝기가 변화하는 (100,100) 의 2차원 흑백이미지를 생성.

x = np.sin(np.linspace(0,np.pi,100))
# plt.plot(x)
# plt.show() 



plt.imshow( x + x.reshape(100,1),cmap='gray')

출력 값

- 컬러 그라데이션 배열

- 문제 : np.linspace 를 사용해서 다음과 같은 (100,100,3) 이미지를 갖는 배열을 생성

narr = np.zeros((100,100,3))
x = np.linspace(0,1,100)
y = x.reshape(100,1,1) * np.array([1,0,0])
plt.imshow(narr+y)

 

Comments