스카이버드 2023. 12. 16. 17:49

목차

1.넘파이 세팅

2.넘파이 배열 생성

3. 배열구조 : shape, reshape

4. 인덱싱, 슬라이싱

5. 배열 생성 함수 : arrange, ones,zeros,empty, identity, eye, diag

6. 랜덤 함수 : np.random.uniform()

7. 배열연산(sum,

8. 연결 함수

9. 사칙 연산,내적,브로드캐스팅

10. 비교연산

11.인덱스 반환

12. 데이터 추출

 

 

1. 넘파이

넘파이란 벡터나 행렬 같은 선형대수의 표현법을 코드로 처리하는 고성능 과학 계산용 라이브러리이다.
  • 특징
    배열의 모든 구성요소에 값이 존재해야함(행렬일 경우 내부의 각 벡터의 크기가 같아야함), 하나의 데이터 타입만 사용, 데이터를 메모리에 연속적으로 나열

2. 넘파이 배열

 2.1 넘파이 배열과 텐서

  텐서 : 선형대수의 데이터 배열 >> 랭크에 따라 이름이 다름

  넘파이 배열 : 텐서 데이터를 다루는 객체(변수)

랭크별 구분

 2.2 배열 생성

배열을 실수형으로 선언안하거와 한거 차이

매개변수 dtype으로 넘파이 배열의 데이터 타입지정가능

#dtype
import numpy as np
a=np.array([[1, 2, 3.5], [4, 5, 6.5]], dtype = int)
print(a)
b=np.array([[1, 2, 3.5], [4, 5, 6.5]], dtype = float)
print(b)

 

 2.3 메소드

  • shape은 배열의 구조 반환 ex) np.array.shape >> (3,4)
    3차원 배열일 경우 shape 결과는 (a,b,c)로 나옴, 튜플로 반환
    ※ones,zeros,empty와 같이 생성함수 사용할 땐 shape을 반환용이 아닌 크기 설정으로 사용
       ex) np.ones(shape = (3,3), dtype = np.int8)
  • ndim : 배열의 차원반환
  • size : 행고 열의 곱 값을 반환
  • reshape : 배열구조 변경 및 랭크 조절
    ex)  np.array.reshape(-1,) >> 행 알아서 지정, array.reshape(2,-1) >> 2행에 열을수는 알아서
    -1의 의미 : 요소의 개수를 맞춰 알아서 결정
    np.array.reshape(1,-1 )  = flatten함수
    >>데이터그대로 1차원으로 변경

  2.4 인덱싱(배열 값에 접근)

인데스 처럼 0부터 시작, 따라서 x행렬읭1행 1열에 접근할경우, array[0,0] or array[]0[0]

접근후 수정 or 값 가져오기

 

2.5 슬라이싱

인덱싱 처럼 0부터 시작하기 때문에 적혀이있는 마지막 숫자는 포함x

그림. 1~3인덱스 행 추출 = 2~3번째 행 추출

건너 뛰면서 슬라이싱하기

리스트와 동일 [초기인덱스,마지막인덱스,증가값], 우선순위는 마지막,초기,증가

 

 

2.6 배열 생성 함수

  • arange
    ex)np.arange(10
  • ones
    ex)np.ones(shape = (5,2), dtype = np.int8)
  • zeros
    ex)np.zeros(shape = (2,2)
  • empty >> 빈 행렬 생성, 초기화되지 않았기 때문에 임의의 작은 값으로 반환, 사실상 0에 가까움
    ex)np.empty(shape = (2,4)
  • np.ones_like(x) >> x와 같은 배열크기의 ones함수 생성
  • np.zeros_like(x)
  • np.empty_like(x)
  • np.identity(n=3, dtype = int) >> nxn 단위 행렬 생성
  • np.eye(N=3, M=5, k=2) >> 행,열,단위행렬시작지점 설정할수 있는 함수
    N은 행의 개수, M은 열의개수, k는 열을 기준으로 하는 시작 인덱스
  • np.diag(matrix, k=1) >> matrix행렬의 대각성분값 추출, k는 열을 기준으로 하는 시작 인덱스

 

 

2.7 통계분석함수

  • uniform 함수 : 균등분포 함수 >> 주어진 범위 안에서 균등한 비율로 난수를 추출
    ex) 'np.random.uniform(시작값, 끝값, 데이터개수)'
  • normal 함수 : 정규분포 함수 >> 랜덤 추출후 평균과 분산을 구해 정규화한것
    ex) 'np.random.uniform(평균값,분산,데이터개수)'

normal 함수

메소드는 np.array.메소드

생성함수 np.생성함수

 

8. 배열 연산 함수(sum,mean,std)

 8.1 sum함수 >> 배열의 모든 요소 값의 합 배출

  ex) array.sum(axis= 0)
axis = 0은 세로방향으로 합

axis = 1 은 가로방향 합

 !!3차원 배열일 경우 완전 달라짐

axis = 0은 깊이, 1이 열(세로), 2가 행(가로)합 

 8.2 mean함수

 8.3 std 함수

 

9.연결함수 : 두 배열을 결합해주는 함수

vstack함수 : 배열을 수직으로 붙임

hstack함수 : 배열을 수평으로 붙임

concatenate 함수 : 축(수직,수평)을 고려하여 두개의 배열을 결합

스택(stack) 계열의 함수와 달리 생성될 배열소스가 되는 배열차원이 같아야함.

즉 생성될 배열이 2차원이면 결합하기전 배열도 2차원으로 바꿔줘야함

그림. 예시

 

10. 사칙연산함수

 기본적으로 배열의 차원이 같아야 사칙연산가능. ex) 벡터는 벡터랑, 행렬은 행렬이랑

그림. 배열간 사칙연산

 10.1 내적

  내적시 앞 행렬의 열과 뒷 행렬의 행의 개수가 동일해야가능

내적 예시

 10.2 브로드캐스팅 연산 >> 그냥 배열에 스칼라값 사칙연산

그림 .브로드캐스팅연산 예시

 

11. 비교연산

 ※연산 결과는 항상 불린형을 가진 배열로 추출

 11.1 연산

  • 브로드캐스팅 비교 연산 ex) x>3
  • 요소별 비교 연산 ex) x>y

 11.2 함수

  • all(=and)과 any(=or)함수

  • 인덱스 반환함수(where 함수) >> 참(True)인 값들의 인덱스를 반환

그림. 인덱스 반환함수

요소가 5이상인 인덱스 1번과 2번자리 출력

  • 정렬된 값의 인덱스를 반환해주는 함수
    argsort : 배열 내 값들을 작은 순서대로(오름차순) 인덱스를 반환
    argmax : 가장 큰 값의 인덱스를 반환
    argmix :  가장 작은 값의 인덱스를 반환

그림. 정렬값 인덱스 반환 함수

 

 11.3 인덱스를 활용한 데이터 추출

  • 불린 인덱스 : 불린 조건을 인덱싱과 같이 넣어 추출

그림. 불린 인덱스 예시

  • 팬시 인덱스 : 해당하는 정수의가 존재하는 인덱스 위치 값을 반환
    ※인덱스 항목에 넣을 배열은 정수로만 구성되어야 함, 두 배열이 굳이 구조가 같을 필요는 없음

그림. 팬시 인덱스