Numpy 공부

2024. 7. 10. 16:08코딩

Numpy란?

Python의 과학 계산용 라이브러리. 벡터나 행렬 같은 선형대수의 표현법을 Python 코드로 처리하는 표준 라이브러리로 사용되고 있음.

Numpy 배열 객체 다루기

array 함수

함수 설명

배열을 생성하는 함수

array(데이터, 데이터 타입)

예시 코드

import numpy as np
test_array = np.array([1,2,3,4], float)

arange 함수

함수 설명

range 함수와 같이 차례대로 값을 생성해줌.
arange(시작 인덱스, 마지막 인덱스, 증가값)
증가 값에 실수 형이 입력되어도 값을 생성할 수 있다

예시 코드

  • 예시1
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

  • 예시2
np.arange(0,5,0.5)
array([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5])

Numpy 인덱싱

행렬에서 일반적으로 표현하는 방법은 '[행][열]' 형태로 많이 나타내지만 넘파이에서는 '[행, 열]' 형태로도 표현 가능.

넘파이 배열 연산

연산 함수

sum, mean, std[표준편차], sqrt[제곱근] 함수가 있다.

  • 배열 생성

    test_array=np.arange(1,13).reshape(3,4) test_array
  • 출력1

    array([[1, 2, 3, 4, [5, 6, 7, 8], [9, 10, 11, 12]])
  • mean (sum도 활동 방법은 같음)

    test_array.mean(axis=1)
  • 출력2

    array([2.5, 6.5, 10.5])
  • std

    test_array.std()
  • 출력3

3.452052529534663 # 전체 값에 대한 표준편차 연산
  • sqrt
    np.sqrt(test.array)
  • 출력4
    array([[1. , 1.41421356, 1.73205081, 2. ], [2.23606798, 2.44948974, 2.64575131, 2.82842712], [3. , 3.16227766, 3.31662479, 3.46410162]])

연결 함수

벡터 간의 연결을 통해 하나의 행렬을 생성하거나, 열 백터 사이의 연산을 통해 행렬을 생성할 수 있다.

vstack과 hstack가 있다.

hstack을 이용할때는 기본 꼴을 2차원 행렬로 구성해줘야 한다.

concatenate함수도 있다.

stack계열 함수와의 차이점은 생성될 배열과 소스가 되는 배열의 차원이 같아야 한다.

결론 -> stack과 concatenate함수를 이용해서 데이터를 다룬다면 1차원 배열도 2차원 행렬로 만들고 진행하기!

사칙연산 함수

같은 배열의 구조(shape)를 가진 경우 -> 요소별 연산(element-wise operation)
다른 배열의 구조(shape)를 가진 경우 -> 브로드캐스팅 연산(broad casting operations)

  • 내적

    x_1.dot(x_2)

비교 연산

배열 내 비교 연산과 배열 간의 비교 연산이 있음.
결과는 항상 boolean type을 가진 배열로 추출

배열 내 비교 연산은 간단.
배열 간의 비교 연산은 비교하는 배열의 구조(shape)가 같아야 함.

  • all : 내부에 있는 모든 값이 참일 때 True, 하나라도 아닌 경우에는 False를 반환한다. (and 조건을 전체 요소에 적용)
  • any : 하나라도 참일 때 True, 모두 거짓일 때 False 반환. (or 조건을 전체 요소에 적용)
  • argsort : 배열 내에 있는 값들을 작은 순서대로 인덱스를 변환
  • argmax : 배열 내 있는 값들 중 가장 큰 값의 인덱스 반환
  • argmin : 배열 내 있는 값들 중 가장 작은 값의 인덱스 반환
  • where : 배열이 불린형으로 이루어졌을 때 참인 값들의 인덱스를 반환
# 입력1
x = np.array([4,6,7,3,2])
x > 5
# 출력1
array([False, True, True, False, False])
# 입력2
np.where(x>5)
# 출력2
(array([1,2], dtype=int64))

np.where 함수를 사용해서 참인 경우와 거짓인 경우의 값을 매칭해주는 값을 지정할 수 있다.
참일 경우에 10을 거짓일 경우에 20을 반환하는 코드이다

# 입력3
x = np.array([4,6,7,3,2])
np.where(x>5, 10, 20)
# 출력3
array([20, 10, 10, 20, 20])

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

  • 불린 인덱스(boolean index) : 배열에 있는 값들을 특정 조건에 의해 반환할 수 있는데, 특정 조건이 불린형의 배열인 경우이다.
    • 발동 조건 1. 인덱스에 들어가는 배열은 불린형
    • 발동 조건 2. 인덱스에 들어가는 불린형의 배열 구조(shape)와 추출 대상이 되는 배열의 구조는 같아야 한다.
  • 팬시 인덱스(fancy index) : 정수형 배열의 값을 사용해서 해당 정수의 인덱스에 위치한 값을 반환하는 것.

boolean index

# 입력1
x = np.array([4,6,7,3,2])
x > 3
# 출력1
array([True, True, True, False, False])
# 입력2
cond = x > 3
x[cond]
# 출력2
array([4, 6, 7])

fancy index

# 입력1
x = np.array([4,6,7,3,2])
cond = np.array([1,2,0,2,2,2], int)
x[cond]
# 출력1
array([6,7,4,7,7,7])
# 입력2
x.take(cond)
# 출력2
array([6,7,4,7,7,7])

이차원

# 입력3
x = np.array([[1,4],[9,16]], int)
a = np.array([0,1,1,1,0,0], int)
b = np.array([0,0,0,1,1,1], int)
x[a,b]
# 출력3
array([1, 9, 9, 16, 4, 4])