Python
05.Python Numpy
owo_v
2020. 9. 7. 16:52
Nmupy 설치¶
-파이썬으로 수치계산을 하기 위한 라이브러리
-다차원 배열을 효율적으로 구현한 Nmupy배열간 빠른 연산을 할 수 있는 루틴 제공
pip install Nmupy
conda install Nmupy
In [1]:
import numpy as np
In [63]:
import numpy as np
A = np.array([1,2,3])
In [64]:
A
Out[64]:
In [65]:
len(A)
Out[65]:
In [66]:
type(A[0])
Out[66]:
In [67]:
A =[1,2,3]
B = [-1,-2,-3]
C = []
for a,b in zip(A,B):
C.append(a+b)
print(C)
In [68]:
import numpy as np
A =np.array([1,2,3])
B = np.array([-1,-2,-3])
C = A+B
C
Out[68]:
In [73]:
import numpy as np
a=np.array([0.1,0.2,0.3])
print(a)
print(a.dtype)
print(type(a[0]))
a[0]
Out[73]:
In [15]:
a=np.array([1,2,3])
print(a)
print(a.dtype)
print(type(a[0]))
dtype=''을 사용하여 데이터 타입을 지정할 수 있다¶
In [17]:
c=np.array([1,2,3], dtype=np.float64)
In [18]:
print(c)
print(c.dtype)
In [75]:
c=np.array([1.,2.,3.])
print(c)
print(c.dtype)
astype(자료형)으로 데이터타입 변환
In [22]:
d = np.array([1.1,2.2,3.3,4.7])
print(d.dtype)
In [24]:
e = d.astype(np.int32)
print(e.dtype)
numpy.ndarray¶
- numpy 배열의 타입은 numpy.ndarray 클래스임
In [28]:
A = np.array([[1,2,3],[4,5,6]])
print(A)
print(type(A))
numpy.ndim¶
- 배열을 구성하는 차원의 개수
In [77]:
B = np.array([1,2,3])
print(B.ndim)
A = np.array([[1,2,3],[4,5,6]])
print(A.ndim)
C = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(C.ndim)
In [37]:
B = np.array([1,2,3])
print(B.ndim)
print(B.shape) #튜플은 값이 1개만 나왔을 때 뒤에 ,를 붙여줘야 튜플인걸 알 수 있다
print(B.size)
In [38]:
A = np.array([[1,2,3],[4,5,6]])
print(A.ndim)
print(A.shape)
print(A.size)
In [39]:
C = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(C.ndim)
print(C.shape)
print(C.size)
In [40]:
B = np.array([1,2,3])
print(B.dtype)
print(B.itemsize)
print(B.data)
In [41]:
A = np.array([[1,2,3],[4,5,6]])
print(A.dtype)
print(A.itemsize)
print(A.data)
In [42]:
C = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(C.dtype)
print(C.itemsize)
print(C.data)
min/max/sum/mean¶
In [44]:
b = np.array([1,2,3,4,5,6])
print(b.max(),end=' ')
print(b.min(),end=' ')
print(b.sum(),end=' ')
print(b.mean(),end=' ')
In [84]:
c = np.array([[1,2,3],[4,5,6]])
c
Out[84]:
In [86]:
c.sum(axis = 0) #열방향으로 계산
Out[86]:
In [87]:
c.sum(axis = 1) #행방향으로 계산
Out[87]:
In [ ]:
! conda install -c conda-forge opencv
In [91]:
import cv2
print(cv2.__version__)
In [99]:
import cv2
image = cv2.imread("image/cat.jpg", cv2.IMREAD_COLOR)
cv2.imshow("Ball", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
In [100]:
import cv2
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Ball", image_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
In [102]:
print(image.ndim)
print(image.shape)
print(image.size)
In [103]:
print(image_gray.ndim)
print(image_gray.shape)
print(image_gray.size)
Numpy 배열 원소 접근방법¶
In [107]:
A = np.array([1,2,3])
A
Out[107]:
In [108]:
print(A.shape)
In [109]:
for i in range(A.size):
print(A[i])
In [114]:
B = np.array([[1,2,3],[4,5,6]])
print(B)
In [117]:
B[0]
Out[117]:
In [118]:
B[1]
Out[118]:
In [120]:
print(B[0,2])
In [123]:
C = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(C)
In [124]:
print(C[1,0,2])
In [126]:
import numpy as np
C = np.arange(24).reshape(2,3,4)
print(C)
print(C.shape)
In [127]:
print(np.arange(10000).reshape(100,100))
In [3]:
import sys
np.set_printoptions(threshold=sys.maxsize)
In [5]:
import numpy as np
print(np.arange(200).reshape(2,100))
In [136]:
import timeit
timeit.timeit('B**2', setup = 'import numpy as np; B=np.arange(100)')
Out[136]:
In [138]:
import timeit
timeit.timeit('[i**2 for i in A]', setup='A=range(100)')
Out[138]:
In [139]:
import numpy as np
a = np.array([1,2,3,4])
print(a.shape)
In [141]:
a.shape = 1,4
In [142]:
print(a)
In [143]:
a.shape
Out[143]:
In [144]:
a.shape =4,1
In [145]:
print(a)
In [146]:
print(a.shape)
배열 생성 및 shape 변환¶
In [153]:
import numpy as np
A = np.zeros((2,3))
print(A)
print(A.dtype)
In [157]:
import numpy as np
A = np.zeros((2,3),dtype='uint8')
print(A)
print(A.dtype)
In [154]:
import numpy as np
A = np.ones((2,3))
print(A)
print(A.dtype)
In [155]:
import numpy as np
A = np.ones((2,3),dtype='uint8')
print(A)
print(A.dtype)
np.empty¶
In [160]:
C = np.empty((5,6))
print(C)
print(C.dtype)
np.random.random(가로,세로) : 0~1사이의 실수를 랜덤으로 생성¶
In [161]:
import random
import numpy as np
D = np.random.random((3,3))
print(D)
np.random.randint(시작,끝,(가로,세로)) : 시작~끝사이의 실수를 랜덤으로 생성¶
In [162]:
import random
import numpy as np
E = np.random.randint(1,10,(2,3))
print(E)
연속원소 배열 생성함수¶
- np.arange(시작,마지막,간격)
- np.arange(시작,마지막)
- np.arange(마지막)
In [164]:
#0~50 범위에서 5간격으로 숫자를 뽑아 배열 생성
A = np.arange(0,50,5)
print(A)
#0.1~2.5 사이에서 1간격으로 숫자를 뽑아 배열 생성
B = np.arange(0.1,2.5,1)
print(B)
#0<=x<-10 내에서 배열 생성
C = np.arange(0,10)
print(C)
np.linspace()¶
- 지정한 범위 내에서 원하는 원소 개수로 숫자를 뽑아냄
- np.linspace(시작값, 마지막값, 샘플 개수)
- np.linspace(시작값, 마지막값)
In [165]:
A = np.linspace(0,10,10)
print(A)
In [166]:
print(A.size)
In [167]:
#샘플개수를 정하지 않으면 기본값은 50
B = np.linspace(0,10)
print(B.size)
print(B)
In [171]:
#0~15까지 16개 1차원 배열
A = np.arange(16)
B = A.reshape(4,4)
print(A)
print()
print(B)
print()
print(B.shape)
print()
print(B.base)
print()
print(B.base is A) # B가 배열A의 데이터가 저장된 공간을 공유함->둘 중 하나의 값을 바꾸면 둘 다 값이 바뀜
In [174]:
C = B.reshape(2,8).copy()
In [175]:
C[0] = 0
print(C)
print(B)
In [183]:
B[0]=-1
print(A)
print(B)
In [176]:
C = np.arange(16)
print(C)
In [179]:
D = C.reshape(8,-1)
print(D)
In [181]:
E = C.reshape(-1,8)
print(E)
ravel()¶
- 주어진 배열을 1차원 배열로 변환하여 리턴
In [185]:
A = np.array([[1,2],[3,4]])
print(A)
In [187]:
B = A.ravel()
print(B)
print(B.shape)
In [188]:
print(B.base is A)
In [189]:
A = np.array([[[1,2],[3,4]],[[1,2],[3,4]]])
print(A)
In [190]:
B = A.ravel()
print(B)
print(B.shape)
newaxis()¶
- 차원을 증가시킴
In [191]:
a = np.array([1,2,3])
a = a[:,np.newaxis]
print(a.shape)
print(a)
In [193]:
a = np.array([1,2,3])
a = a[np.newaxis,:]
print(a.shape)
print(a)
hstack / vstack¶
- 결합함수
- hstack : 가로로 결합
- vstack : 세로로 결합
In [197]:
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[1,0],[1,0]])
print(A)
print()
print(B)
print()
C = np.hstack((A,B))
print(C)
print()
D = np.vstack((A,B))
print(D)
column_stack()¶
- 1차원 벡터를 2차원 벡터로 만든다
In [198]:
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
D = np.column_stack((a,b,c))
print(D)
concatenate((배열1,배열2),axis=1)¶
- 지정한 방향으로 배열 결합
- axis = 0 : 열방향
- axis = 1 : 행방향
In [199]:
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[1,0],[1,0]])
C =np.concatenate((A,B), axis=0) #열방향 , 세로로
print(C)
D =np.concatenate((A,B), axis=1) #행방향 , 가로로
print(D)
hsplit / vsplit¶
- 가로 또는 세로로 자르기
In [200]:
B = np.arange(18).reshape(3,6)
print(B)
In [201]:
C = np.hsplit(B,3)
print(C)
In [203]:
b = np.hsplit(B,(2,4))
print(b)
In [204]:
B = np.arange(18).reshape(6,3)
print(B)
In [207]:
C = np.vsplit(B,(2,4))
print(C)
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important; }</style>"))
In [ ]: