AI 보안 데이터 리터러시_numpy

거부기·2022년 6월 9일
1

📊 KOCW

목록 보기
3/8
post-thumbnail

라이브러리 : 특정 목적에 맞는 함수나 메소드들을 모아 놓은 집합

numpy 라이브러리 :

  • 수치 해석이나 통계 관련 기능에 특화되어 있음
  • 다른 파이썬 라이브러리들과 함께 사용되는 경우가 많음 (ex. pandas, matplotlib 등)
  • 실행 속도가 빠른 편임

numpy의 1차원 자료형(1)

  • 1차원적인 데이터 형식
  • 파이썬의 리스트와 유사하나 벡터 연산이 가능함
import numpy as np
a = [10, 20, 30, 40, 50]
a
> [10, 20, 30, 40, 50]
type(a)
> list
b = np.array(a) # 리스트를 넘파이로 가져올 수 있음
b
> array([10, 20, 30, 40, 50])
print(b)
> [10 20 30 40 50]
b.shape # 형성된 데이터 구조가 어떤 형태인지 보는 것, 1차원이고 5개의 값으로 구성되어있다~ 1차원일 때는 숫자만큼 원소개수, 공란
> (5,)
c = np.array([5, 4, 3, 2, 1])
c
> array([5, 4, 3, 2, 1])
b + c # 동일한 위치에 있는 원소값들끼리 덧셈 연산, 리스트는 이어붙이는 형태
> array([15, 24, 33, 42, 51])
b + 5 # 각각의 원소에 5를 더해줌, 리스트에서는 불가능
> array([15, 25, 35, 45, 55])

numpy의 1차원 자료형(2)

  • 자주 사용하는 numpy 기본 함수
    • sum() : 합계
    • mean() : 평균
    • max() : 최댓값
    • min() : 최솟값
    • round() : 반올림
    • arange() : 리스트의 range()와 유사
    • zeros() : 0으로 이루어진 벡터
    • ones() : 1으로 이루어진 벡터
    • copy() : 복사
np.sum(b)
> 150
np.mean(b)
> 30.0
np.max(b)
> 50
np.min(b)
> 10
c = b / 3
c
> array([ 3.33333333,  6.66666667, 10.        , 13.33333333, 16.66666667])
np.round(c,1) # c라는 array를 소수점 첫 번째자리까지 반올림
> array([ 3.3,  6.7, 10. , 13.3, 16.7])
np.round(c,0)
> array([ 3.,  7., 10., 13., 17.])
b[0]
> 10
b[-1]
> 50
b[1:3]
> array([20, 30])
b[:2]
> array([10, 20])
np.sum(b[2:]) # b array에서 3번째 이후에 합
> 120
np.mean(b[2:])
> 40.0
b[1] = 200 # 특정값 바꾸기도 가능
b
> array([ 10, 200,  30,  40,  50])
d = np.arange(5) # 숫자 하나만 넣었을 때는 0부터 (가로안에 숫자-1)까지, range와 비슷
d
> array([0, 1, 2, 3, 4])
e = np.arange(3,8) # 숫자 두개 넣었을 때는 첫번째 숫자부터 (두번째 숫자-1)까지
e
> array([3, 4, 5, 6, 7])
f = np.arange(3,8,2) # 숫자 세개를 넣었을 때는 첫번째 숫자부터 (두번째 숫자-1)까지 세번쨰 숫자 간격으로
f
> array([3, 5, 7])
g = np.zeros(5)
g
> array([0., 0., 0., 0., 0.])
h = np.ones(5)
h
> array([1., 1., 1., 1., 1.])
b
> array([ 10, 200,  30,  40,  50])
bb = b
bb
> array([ 10, 200,  30,  40,  50])
bb[0] = 100
bb
> array([100, 200,  30,  40,  50])
b # 리스트에서 발생했던 복사의 문제가 여기서도 발생
> array([100, 200,  30,  40,  50])
b == bb
> array([ True,  True,  True,  True,  True])
bb = b.copy()
bb
> array([100, 200,  30,  40,  50])
b[2] = 300
b
> array([100, 200, 300,  40,  50])
bb
> array([100, 200,  30,  40,  50])
b == bb
> array([ True,  True, False,  True,  True])

numpy의 2차원 자료형

  • 2차원적인 데이터 형식
  • 행렬 연산이 가능함
import numpy as np
a = np.array([[10, 20, 30, 40], [50, 60, 70, 80]])
a # 행 먼저, 숫자는 0부터
> array([[10, 20, 30, 40],
       [50, 60, 70, 80]])
a.shape # 2행 4열
> (2, 4)
b, c = a.shape # 행/열의 값 따로 끈헝서 저장하기

b
> 2

c
> 4
a[0,0]
> 10
a[-1,-1]
> 80
a[1, 1:] # 두번째행 두번째부터 전부
> array([60, 70, 80])
a # 값에 영향을 주지는 않음
> array([[10, 20, 30, 40],
       [50, 60, 70, 80]])
a[0,1] = 2
a
> array([[10,  2, 30, 40],
       [50, 60, 70, 80]])
b = np.zeros((2,4))
b # 2행 4열
> array([[0., 0., 0., 0.],
       [0., 0., 0., 0.]])
c = np.ones((3,5))
c # 3행 5열
> array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])
c = np.arange(8)
c
> array([0, 1, 2, 3, 4, 5, 6, 7])
c.reshape(2,4) # c array를 몇행, 몇열로 만들어라
> array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
c # 따로 저장을 안했기 떄문에 영향을 안줌
> array([0, 1, 2, 3, 4, 5, 6, 7])
c = c.reshape(2,4)
c
> array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
c = c.reshape(4,2)
c
> array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
c.sum()
> 28
d = c.copy() # 의도가 있지 않은 이상, copy사용

d[0,0] = 10
d
> array([[10,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7]])
c
> array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
c == d
> array([[False,  True],
       [ True,  True],
       [ True,  True],
       [ True,  True]])
e = np.arange(49).reshape(7,7) # 바로 한번에 할 수 있음
e
> array([[ 0,  1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25, 26, 27],
       [28, 29, 30, 31, 32, 33, 34],
       [35, 36, 37, 38, 39, 40, 41],
       [42, 43, 44, 45, 46, 47, 48]])
e[:,1:3] # 행 전부와 2,3번째 열, 일부만 가져오기
> array([[ 1,  2],
       [ 8,  9],
       [15, 16],
       [22, 23],
       [29, 30],
       [36, 37],
       [43, 44]])
e[3: , :4]
> array([[21, 22, 23, 24],
       [28, 29, 30, 31],
       [35, 36, 37, 38],
       [42, 43, 44, 45]])
e[3: , :4].sum()
> 528
f = e[3: , :4].copy()
f
> array([[21, 22, 23, 24],
       [28, 29, 30, 31],
       [35, 36, 37, 38],
       [42, 43, 44, 45]])
e[4,0] = 100

e
> array([[  0,   1,   2,   3,   4,   5,   6],
       [  7,   8,   9,  10,  11,  12,  13],
       [ 14,  15,  16,  17,  18,  19,  20],
       [ 21,  22,  23,  24,  25,  26,  27],
       [100,  29,  30,  31,  32,  33,  34],
       [ 35,  36,  37,  38,  39,  40,  41],
       [ 42,  43,  44,  45,  46,  47,  48]])
f
> array([[21, 22, 23, 24],
       [28, 29, 30, 31],
       [35, 36, 37, 38],
       [42, 43, 44, 45]])
f.sum()
> 528

numpy의 기본연사과 조건처리(1)

  • 사칙연산(+,-,*,/,//,%)
  • 스칼라곱, 행렬곱
numpy as np
import numpy as np
a = np.arange(5, 45, 5).reshape(2,4)
b = np.arange(20, 36, 2).reshape(2,4)
a
> array([[ 5, 10, 15, 20],
       [25, 30, 35, 40]])
b
> array([[20, 22, 24, 26],
       [28, 30, 32, 34]])
a + b # 행과 열의 크기가 같을 때 가능
> array([[25, 32, 39, 46],
       [53, 60, 67, 74]])
b - a
> array([[15, 12,  9,  6],
       [ 3,  0, -3, -6]])
a * b
> array([[ 100,  220,  360,  520],
       [ 700,  900, 1120, 1360]])
a / b
> array([[0.25      , 0.45454545, 0.625     , 0.76923077],
       [0.89285714, 1.        , 1.09375   , 1.17647059]])
a // b
> array([[0, 0, 0, 0],
       [0, 1, 1, 1]], dtype=int32)
a % b
> array([[ 5, 10, 15, 20],
       [25,  0,  3,  6]], dtype=int32)
a * 10
> array([[ 50, 100, 150, 200],
       [250, 300, 350, 400]])
a # a 자체에는 영향 x
> array([[ 5, 10, 15, 20],
       [25, 30, 35, 40]])
c = a * 10
c
> array([[ 50, 100, 150, 200],
       [250, 300, 350, 400]])
b
> array([[20, 22, 24, 26],
       [28, 30, 32, 34]])
bb = b.reshape(4, 2)
bb # 앞서 만든 a,c 행렬과의 곱셈이 가능, 행렬곱은 앞의 행렬의 열의 개수, 뒤의 행렬의 행의 개수
> array([[20, 22],
       [24, 26],
       [28, 30],
       [32, 34]])
a @ bb # 행렬곱 (a 1행* b 1열),(a 1행, b 2열), (a 2행* b 1열),(a 2행, b 2열)
> array([[1400, 1500],
       [3480, 3740]])

numpy의 기본연사과 조건처리(2)

  • numpy의 조건처리
a = np.arange(1,15)
a
> array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
a > 10
> array([False, False, False, False, False, False, False, False, False,
       False,  True,  True,  True,  True])
a == 5 # 5의 위치
> array([False, False, False, False,  True, False, False, False, False,
       False, False, False, False, False])
a[a > 5] # 5보다 큰 값들을 출력해줌
> array([ 6,  7,  8,  9, 10, 11, 12, 13, 14])
a[a < 5] = 5 # 5보다 작은 원소들은 5로 바꿔줘라, 튀는 값들을 바꿀 때 사용하면 좋음

a
> array([ 5,  5,  5,  5,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
a[a > 10] = 10

a
> array([ 5,  5,  5,  5,  5,  6,  7,  8,  9, 10, 10, 10, 10, 10])
profile
느리지만 확실하게

0개의 댓글