본문 바로가기
인공지능

Numpy 라이브러리 활용하기 (배열 연산)

by 코뮤(commu) 2021. 3. 22.
728x90
반응형

Numpy 활용하기

 

 

바로 이전 포스팅과 같이 사용하기전에 import 해주고 시작!

 

 

배열 연산

 

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]))

 

 

 

그래프의 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)




728x90
반응형