본문 바로가기
2023-1/인공지능

넘파이를 알아보자(numpy)

by 철없는민물장어 2023. 4. 18.
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

'2023-1 > 인공지능' 카테고리의 다른 글

퍼셉트론의 학습  (0) 2023.04.19
신경망  (0) 2023.04.19
신경망, 퍼셉트론  (0) 2023.04.19
퍼셉트론의 이해  (0) 2023.03.25
머신러닝과 딥러닝 이해  (0) 2023.03.10

댓글