본문 바로가기
언어/python

python Numpy

by 스퀴시 2020. 7. 15.
728x90
SMALL
  • numpy는 과학 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 여러 유용한 기능을 제공
  • numpy에서 배열은 동일한 타입의 값들을 가진다.
  • 배열의 차원을 rank 라 하고, 각 차원의 크기를 튜플로 표시하는 것을 shape

 

  • 설치
$ pip install numpy

 

  • 배열 만드는 함수
zeros()는 해당 배열에 모두 0을 집어 넣고
 ones()는 모두 1을 집어 넣는다. 
full()은 배열에 사용자가 지정한 값을 넣는데 사용하고,
 eye()는 대각선으로는 1이고 나머지는 0인 2차원 배열을 생성

 

  • 예제
import numpy as np
 
a = np.zeros((2,2))
print(a)
# 출력:
# [[ 0.  0.]
#  [ 0.  0.]]
 
a = np.ones((2,3))
print(a)
# 출력:
# [[ 1.  1.  1.]
#  [ 1.  1.  1.]]
 
a = np.full((2,3), 5)
print(a)
# 출력:
# [[5 5 5]
#  [5 5 5]]
 
a = np.eye(3)
print(a)
# 출력:
# [[ 1.  0.  0.]
#  [ 0.  1.  0.]
#  [ 0.  0.  1.]]
 
a = np.array(range(20)).reshape((4,5))
print(a)
# 출력:
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]

 

  • indexing&slicing
import numpy as np 

# 아래와 같은 요소를 가지는 rank가 2이고 shape가 (3,4) 인 배열 생성
# [[1   2   3   4]]
#  [5   6   7   8]
#  [9   10  11  12]]

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

# 배열의 중간 행에 접근하는 두 가지 방법이 있습니다.
# 정수 인덱싱과 슬라이싱을 혼합해서 사용하면 낮은 rank의 배열이 생성되지만,
# 슬라이싱만 사용하면 원본 배열과 동일한 rank의 배열이 생성됩니다.

row_r1 = a[1, :]    #배열a의 두 번째 행을 rank가 1인 배열로
row_r2 = a[1:2, :]  #배열a의 두 번째 행을 rank가 2인 배열로
print(row_r1,row_r1.shape)  # 출력 "[5  6   7   8] (4,)"
print(row_r2,row_r2.shape)  # 출력 "[[5 6   7   8] (1,4)"

col_r1 = a[:,1]    
col_r2 = a[:,1:2]   
print(col_r1,col_r1.shape)
print(col_r2,col_r2.shape)
  • Numpy-Data type
import numpy as np

x= np.array([1,2])  #Numpy가 자료형을 추측해서 선택
print(x.dtype)      # 출력 "int64"

x = np.array([1.0, 2.0]) 
print(x.dtype)      #출력 "float64"

x = np.array([1,2], dtype = np.int64)   #특정 자료형을 명시적으로 지정
print(x,dtype)

 

Broadcasting
- 다른 shape를 가지는 행렬끼리 연산 
- 이해하기 어렵지만 알고나면 효과적

import numpy as np 

# 행렬 x의 각 행에 벡터 v를 더한 뒤,
# 그 결과를 행렬 y에 저장하고자 합니다.

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와 동일한 shape를 가지며 비어있는 행렬 생성

# 명시적 반복문을 통해 행렬 x의 각 행에 벡터 v를 더하는 방법 ->매우느림!!
for i in range(4):
    y[i, :] = x[i,:] + v            #매우 느림

y = x + v # 브로드캐스팅을 이용하여 v 를 x의 각 행에 더하기!! 
					# 이해 할것!

#이제 y는 다음과 같다
# [[2 2 4]]
#  [5 5 7]
#  [8 8 10]
#  [11 11 13]
print(y)


 

  • arrange()
numpy.arange([start, ] stop, [step, ] dtype=None)

numpy 모듈의 arange 함수는 반열린구간 [start, stop) 에서 step 의 크기만큼 일정하게
 떨어져 있는 숫자들을 array 형태로 반환해 주는 함수


stop 매개변수의 값은 반드시 전달되어야 하지만 start 는 step 은 꼭 전달되지 않아도 된다.
 start 값이 전달되지 않았다면 0 을 기본값으로 가지며,
 step 값이 전달되지 않았다면 1 값을 기본값으로 갖게 된다.

dtype 의 경우 결과로 반환되는 array 이의 type 을 지정할 때 사용한다.
 dtype 값이 주어지지 않는 경우 전달된 다른 매개 변수로부터 type 을 추론하게 된다.


>>> import numpy as np
 >>> np.arange(3) array([0, 1, 2])
 >>> np.arange(3.0) array([ 0., 1., 2.])
 >>> np.arange(3,7) array([3, 4, 5, 6])
 >>> np.arange(3,7,2) array([3, 5])

 

Matplotlib

  • plotting 라이브러리
import numpy as np 
import matplotlib.pyplot as plt 

# 사인과 코사인 곡선의 x,y 좌표를 계산

x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)

#matplotlib를 이용해 점들을 그리기
plt.plot(x,y)
plt.show()      #그래프를 나타나게 하기 위해선 plt.show() 함수를 호출해야만 합니다.
LIST

'언어 > python' 카테고리의 다른 글

(python) CSV to MySQL  (0) 2020.08.19
python 반복문  (0) 2020.07.15
List 자료형  (0) 2020.07.15
python 자료형(문자열)  (0) 2020.07.15
python 자료형 (숫자형)  (0) 2020.07.15