728x90
0. 넘파이 임포트하기
import numpy as np
(np로 사용하기 위해 as np를 붙임)
1. 넘파이 배열 생성하기
x = np.array([0,10,20,30,40,50]) #파이썬 자료형(리스트)를 넘파이 배열로 변환
print(x)
print(type(x.dtype),end='')
print(x.shape)
np.array()에 리스트를 인자로 넘기면 넘파이 배열로 반환.
[ 0 10 20 30 40 50]
<class 'numpy.dtype[int32]'>(6,)
이차원 배열 생성
y= np.array([[0,1,2],[10,11,12]]) #2차원 리스트를 넘파이 배열로 생성
print(y)
print(type(y.dtype),end='') #데이터타입 출력
print(y.shape) #행과 열을 출력
z=np.zeros_like(y) #기존 numpy배열(y) 와 동일한 형상의 초기화 배열 생성
print(z)
[[ 0 1 2]
[10 11 12]]
<class 'numpy.dtype[int32]'>(2, 3)
[[0 0 0]
[0 0 0]]
shape 출력시 (행,렬)로 출력되어 (2,3)의 결과가 나왔다.
또, np.zeros_like()에 배열을 넘기면, 똑같은 shape의 0으로 초기화된 배열을 반환한다.
2. 배열 원소 액세스
A=np.array([[0,1],[10,11],[20,21]])
print(A[2,1]) #2행1열 출력
print(A[1]) #1행 출력
21
[10 11]
인덱스에 배열을 넣을 수도 있다.
#인덱스 배열 사용 방식
x=np.array([0,10,20,30,40,50])
print(x[1])
t=np.array([0,2,2,4])
print(t)
k=x[np.array(t)]
print(k)
10
[0 2 2 4]
[ 0 20 20 40]
k는 x배열에서 0,2,2,4 인덱스에 해당하는 값으로만 이루어져
0,20,20,40이 들어가 있다.
#인덱스로 불린 배열을 사용
k=x>20
print(k)
print(x[k])
여기서 k에는 x의 각 원소가 20을 초과하는지 True, False로 이루어진 배열이 들어간다.
x[k]는 k에서 true인 인덱스의 x값만 들어간다.
[False False False True True True]
[30 40 50]
배열 슬라이싱
#배열 슬라이싱
X=np.array([[0,1,2,3,4],[10,11,12,13,14],[20,21,22,23,24]])
Y=X[1:2,1:4] #1행부터~2행전까지, 1열부터~4열전까지.
#배열 슬라이스시 [start:end]의 경우 end-1까지의 값까지만 포함되고, end는 포함되지않음을 주의. 값을 생략시 끝까지를 의미
print(Y)
Y[0:,0:] =0 #0부터 끝까지의 행과 0부터 끝까지의 열은 0을 넣음
print(Y)
print(X)
슬라이싱은 [start:end]형태인데, end는 포함되지 않음을 주의하자.
[[11 12 13]]
[[0 0 0]]
[[ 0 1 2 3 4]
[10 0 0 0 14]
[20 21 22 23 24]]
3. 산술연산
x=np.array([1.0,2.0,3.0])
y=np.array([2.0,4.0,6.0])
print(x-y)
print(x/y)
행렬간 사칙연산
[-1. -2. -3.]
[0.5 0.5 0.5]
#차원이 맞지않더라도 브로드캐스트 연산함. 피연산자가 상수인 경우 원소단위로 수행, 1차원배열이면 행단위로 연산
X=np.array([[1,2],[3,4]])
Y=np.array([10,20])
print(X*10)
print(X*Y)
[[10 20]
[30 40]]
[[10 40]
[30 80]]
차원이 달라도 브로드캐스트 연산된다.
4. 벡터 내적
X=np.array([1,2,3])
Y=np.array([1,2,3])
print(np.dot(X,Y)) #내적
X=np.array([[1,2],[3,4],[5,6]])
Y=np.array([1,2])
print(np.dot(X,Y)) #내적. (브로드캐스트)
14
[ 5 11 17]
5. 행렬 곱
#행렬곱은 np.dot()으로 내적연산을 함
#앞 행렬의 행 수와 뒷 행렬의 열 수가 일치해야함
X=np.array([1,2])
Y=np.array([[3,2,1],[4,5,2]])
print(np.dot(X,Y))
#3x2 * 2x3 행렬
X=np.array([[1,2,1],[4,5,6]])
Y=np.array([[1,2,],[2,3],[1,2]])
print(np.dot(X,Y))
[11 12 5]
[[ 6 10]
[20 35]]
6.평활화
X=np.array([[1,2],[3,4]])
X=X.flatten()
print(X)
[1 2 3 4]
8. 축방향 연산
#배열의 형상에서 높은 차원에서 낮은 차원으로 0부터 시작하는 올림차 번호를 부여함.
#3차원 배열의 경우: 행=2 열=1 깊이=0
X=np.array([[0,1,2,3,4],[10,11,12,13,14],[20,21,22,33,34]])
s=np.sum(X,axis=0) #(2차원기준) 축번호0 => 열 덧셈
print(s)
s=np.sum(X,axis=1) #(2차원기준) 축번호1 => 행 덧셈
print(s)
[30 33 36 49 52]
[ 10 60 130]
728x90
댓글