Numpy 설치¶
- 파이썬으로 수치계산을 하기 위한 라이브러리
- 다차원 배열을 효율적으로 구현한 Numpy배열간 빠른 연산을 할 수 있는 루틴 제공
pip install numpy
conda install numpy
In [5]:
import numpy as np
- 리스트: 여러 데이터 타입의 데이터 원소를 가질 수 있음
- Numpy : 단일 데이터 타입의 데이터 원소를 가질 수 있음
In [6]:
import numpy as np
A= np.array([1,2,3])
In [7]:
A
Out[7]:
In [16]:
A= [1, 2, 3]
B= [-1, -2 -3]
C= []
for a, b in zip(A, B):
C.append(a+b)
print(C)
In [19]:
import numpy as np
A= np.array([1, 2, 3])
B= np.array([-1, -2, -3])
C= A+B
print(C)
In [20]:
len(A)
Out[20]:
In [23]:
import numpy as np
a= np.array([0.1, 0.2, 0.3])
print(a)
print(a.dtype)
print(type(a[0]))
In [24]:
import numpy as np
b= np.array([1, 2, 3])
print(b)
print(b.dtype)
print(type(b[0]))
dtype= ' '을 사용해서 데이터 타입 지정
In [11]:
c= np.array([1, 2, 3])
In [12]:
print(c)
print(c.dtype)
In [14]:
d= np.array([1.1, 2.2, 3.3, 4.7])
print(d.dtype)
**astype(자료형)으로 데이터 타입 변환
In [15]:
e= d.astype(np.int32)
print(e.dtype)
- numpy.ndarray¶
- numpy 배열의 타입은 numpy.ndarray 클래스임
In [9]:
import numpy as np
A= np.array([[1, 2, 3], [4, 5, 6]])
print(A)
print(type(A))
ndarray.ndim¶
- 배열을 구성하는 차원의 개수
In [16]:
A= np.array([[1, 2, 3], [4, 5, 6]])
print(A.ndim)
In [18]:
B= np.array([1, 2, 3])
print(B.ndim)
In [19]:
C= np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(C.ndim)
ndarray.shape¶
- 배열을 구성하는 차원의 개수와 차원별 크기를 튜플로 나타냄
In [21]:
B= np.array([1, 2, 3])
print(B.ndim)
print(B.shape)
In [20]:
A= np.array([[1, 2, 3], [4, 5, 6]])
print(A.ndim)
print(A.shape)
In [22]:
C= np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(C.ndim)
print(C.shape)
ndarray.size¶
- 배열에 있는 모든 원소의 개수(shape의 모든 원소를 곱한 값)
In [5]:
import numpy as np
B= np.array([1, 2, 3])
print(B.ndim)
print(B.shape)
print(B.size)
In [8]:
A= np.array([[1, 2, 3], [4, 5, 6]])
print(A.ndim)
print(A.shape)
print(A.size)
E=np.array([[1, 2, 3,4], [4, 5, 6,7], [7,8,9,10]])
print(E.shape)
E
Out[8]:
In [25]:
C= np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(C.ndim)
print(C.shape)
print(C.size)
ndarray.dtype¶
- 배열원소의 데이터 타입을 나타냄
### ndarray.itemsize - 배열원소 하나의 바이트 크기
### ndarray.data - 배열원소를 실제로 저장하고 있는 버퍼
In [26]:
B= np.array([1, 2, 3])
print(B.dtype)
print(B.itemsize)
print(B.data)
In [27]:
A= np.array([[1, 2, 3], [4, 5, 6]])
print(A.dtype)
print(A.itemsize)
print(A.data)
In [28]:
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 [29]:
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 [30]:
c= np.array([[1, 2, 3], [4, 5, 6]])
c
Out[30]:
In [31]:
c.sum(axis=0) # 열방향으로 계산
Out[31]:
In [32]:
c.sum(axis=1) #행방향으로 계산
Out[32]:
In [36]:
!conda install -c conda-forge opencv
In [37]:
import cv2
In [ ]:
import cv2
print(cv2.__version__)
In [1]:
import cv2
image = cv2.imread("aa/balloon.jpg", cv2.IMREAD_COLOR)
cv2.imshow("Ball", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
In [5]:
import cv2
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray", image_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
In [11]:
#차원의 개수
print(image.ndim)
print(image_gray.ndim)
In [10]:
# 배열을 구성하는 차원의 개수와 차원별 크기를 튜플로 나타냄
print(image.shape)
print(image_gray.shape)
넘파이 배열 원소 접근방법¶
In [14]:
import numpy as np
A= np.array([1,2,3])
A
Out[14]:
In [15]:
print(A.shape)
In [16]:
for i in range(A.size):
print(A[i])
In [17]:
B= np.array([[1,2,3], [4,5,6]])
print(B)
In [18]:
B[1]
Out[18]:
In [19]:
print(B[0,2])
In [20]:
C= np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
In [22]:
print(C[1,0,2])
In [24]:
import numpy as np
C= np.arange(24).reshape(2,3,4)
print(C.shape)
In [25]:
print(np.arange(10000). reshape(100,100))
In [98]:
import sys
np.set_printoptions(threshold=sys.maxsize)
print(np.arange(200). reshape(2,100))
In [73]:
import timeit
timeit.timeit('B**2', setup='import numpy as np; B=np.arange(100)')
Out[73]:
In [96]:
import timeit
timeit.timeit('[i**2 for i in A]', setup='A=range(100)')
Out[96]:
In [35]:
import numpy as np
a=np.array([1,2,3,4])
print(a.shape)
In [36]:
a.shape=1,4
In [37]:
print(a)
In [38]:
a.shape
Out[38]:
In [39]:
a.shape=4,1
In [40]:
print(a)
In [41]:
print(a.shape)
배열 생성 및 shape 변환¶
In [47]:
import numpy as np
A=np.zeros((2,3))
print(A)
print(A.dtype)
#기본은 float64
In [44]:
import numpy as np
A=np.zeros((2,3), dtype='uint8')
print(A)
print(A.dtype)
In [45]:
import numpy as np
A=np.ones((2,3))
print(A)
print(A.dtype)
In [46]:
import numpy as np
A=np.ones((2,3), dtype='uint8')
print(A)
print(A.dtype)
np.empty(): 초기화 하지 않고 배열 공간 할당하기¶
In [50]:
C=np.empty((5,5))
print(C)
print()
print(C.dtype)
np.random.random()¶
- 0~1 사이의 실수를 랜덤으로 생성
In [52]:
import random
import numpy as np
D= np.random.random((3,3))
print(D)
np.random.randint(시작,끝(가로, 세로))¶
- 시작~끝 사이의 실수를 랜덤으로 생성
In [54]:
import random
import numpy as np
E= np.random.randint(1,10,(2,3))
print(E)
연속원소 배열 생성함수¶
- np.arrange(시작,마지막,간격)
- np.arrange(시작,마지막)
- np.arrange(마지막)
In [57]:
# 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 [61]:
A=np.linspace(0,10,10)
print(A.size)
print(A)
In [60]:
#샘플 개수를 정하지 않으면 기본값은 50
B= np.linspace(0,10)
print(B.size)
print(B)
In [63]:
# 0~15까지 16개 1차원 배열
A=np.arange(16)
B= A.reshape(4,4)
print(A)
print(B)
print(A.shape)
print(B.shape)
print(B.base)
print(B.base is A) # B가 배열A의 데이터가 저장된 공간을 공유함
In [64]:
B[0]=-1
print(A)
print(B)
In [66]:
C==B.reshape(2,8).copy()
C[0]= 0
print(C)
print(B)
In [67]:
C=np.arange(16)
print(C)
In [68]:
D=C.reshape(8,-1)
print(D)
In [69]:
E= C.reshape(-1,8)
print(E)
ravel()¶
- 주어진 배열을 1차원 배열로 변환하여 리턴
In [70]:
A= np.array([[1,2], [3,4]])
print(A)
In [71]:
B=A.ravel()
print(B)
print(B.shape)
In [72]:
print(B.base is A)
In [93]:
A=np.array([[[1,2], [3,4]], [[1,2], [3,4]]])
print(A)
In [95]:
B= A.ravel() # 몇차원이든 1차원으로
print(B)
print(B.shape)
newaxis()¶
- 차원을 증가시킴
In [76]:
a= np.array([1,2,3])
a=a[:, np.newaxis]
print(a.shape)
print(a)
In [77]:
a= np.array([1,2,3])
a=a[np.newaxis, :]
print(a.shape)
print(a)
hstack(가로로 결합)/ vstack (세로로 결합)¶
In [79]:
import numpy as np
A= np.array([[1,2], [3,4]])
B= np.array([[1,0], [0,1]])
print(A)
print(B)
C=np.hstack((A,B))
print(C)
D= np.vstack((A,B))
print(D)
column_stack()¶
- 1차원 벡터를 2차원 벡터로 만들기
In [81]:
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 [10]:
import numpy as np
A= np.array([[1,2], [3,4]])
B= np.array([[1,0], [0,1]])
C= np.concatenate((A,B), axis=0) #열방향, 세로로
print(C)
print()
D= np.concatenate((A,B), axis=1) #열방향, 가로로
print(D)
hsplit/ vsplit¶
- 가로 또는 세로로 자르기
In [83]:
B= np.arange(18).reshape(3,6)
print(B)
In [85]:
C=np.hsplit(B,3)
print(C)
In [86]:
b=np.hsplit(B, (2,4))
print(b)
In [87]:
B= np.arange(18).reshape(6,3)
print(B)
In [88]:
b=np.vsplit(B, (2,4))
print(b)
In [ ]:
'Python' 카테고리의 다른 글
Python 기초08_matplotlib(그래프 그리기,subplots,meshgrid) (0) | 2020.09.08 |
---|---|
Python 기초07_Numpy2 (0) | 2020.09.08 |
Python 기초05 (0) | 2020.09.07 |
Python기초04_ 텍스트파일에서 특정단어를 원하는 단어로 바꾸기 (0) | 2020.09.06 |
Python 기초04_ 파일 다루기(텍스트 파일 생성, 편집 등) (0) | 2020.09.06 |