Numpy

Numpy는 수치해석, 통계관련 기능을 제공하는 Python 라이브러리이다.

 

용어

  • Axis: 배열의 각 축을 의미
    • 2차원에서 axis0은 열방향( ⬇️ ), axis1은 행방향을 의미( ➡️ )
  • Rank: 축의 개수 (차원), ex)  1차원, 2차원, 3차원 ...
  • Shape: 축의 개수

라이브러리 불러오기

  1. 별칭 없이 라이브러리 불러오기
  2. 별칭을 주고 라이브러리 불러오기
  3. 특정 함수만 불러오기
# 별칭 없이 라이브러리 불러오기
import numpy

a = numpy.array([1,2])

# 별칭 주고 라이브러리 불러오기
import numpy as np
a = np.array([1,2])

# 특정 함수만 불러오기
from numpy import array
a = array([1,2])

 

배열 만들기 numpy.array(리스트)

1차원 배열

# 라이브러리 
import numpy as np

# 1차원 배열 생성
a = np.array([1,2,3])

# 차원
print(a.ndim) # 1

# 모양
print(a.shape) # (3, ) 원소 3개인 1차원 배열

# 데이터 형식
print(a.dtype) # int

# 배열 원소 조회
print(a[0], a[1], a[2]) # 1 2 3

 

2차원 배열

# 라이브러리 
import numpy as np

# 1차원 배열 생성
a = np.array([[1,2,3],
			[4,5,6],
            [7,8,9]])

# 차원
print(a.ndim) # 2

# 모양
print(a.shape) # (3, 2) 원소 3개인 2차원 배열

# 데이터 형식
print(a.dtype) # int

# 배열 원소 조회
print(a[0][0], a[1][1], a[2][2]) # 1 5 9

 

 

3차원 배열

# 라이브러리 
import numpy as np

# 1차원 배열 생성
a = np.array([
    [[1,2,],[3,4]],
    [[5,6],[7,8]]
])

# 차원
print(a.ndim) # 3

# 모양
print(a.shape) # (2, 2, 2) (2,2) 크기의 2차원 배열이 2개

# 데이터 형식
print(a.dtype) # int

# 배열 원소 조회
print(a[0][0], a[1][1]) # [1 2] [7 8]

 

Axis0 의 의미

  • 데이터의 건수를 의미한다.

2차원 데이터의 Shape가 (200, 4) 이라고 가정해보자. 이때 의미는 컬럼이 4개인 데이터가 100개 있다는 의미이다.

코드로 작성해서 확인해보면 다음과 같다.

# 라이브러리 
import numpy as np

a0 = ['Kim', 20, 201324, 'A']
student = np.array([a0] * 100)
print(student.shape) # (100, 4)
print(student.ndim) # 2

 

a0 은 학생a의 이름, 나이, 학번, 성적 정보를 가지고 있는 리스트이다.

해당 리스트를 np.array() 메소드를 통해서 100개의 데이터를 배열로 만드는 코드이다.

shape를 확인해보면 4개의 컬럼으로 이루어진 100개의 데이터다! 라는 것을 확인할 수 있고, ndim (차수)가 2차원 인것을 확인할 수 있다.

 

Reshape

기존 배열의 Shape를 새로운 형태의 배열로 재구성하는 함수

배열.reshape(행, 열)

np.reshape(배열, 행, 열)

  • array.reshape(3, -1) # array를 3행으로 된 배열로 변환
  • array.resahpe(-1, 3) # array를 3열로 된 배열로 변환
import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]

array_a = np.array(list_a)
print(array_a)
# [[ 1  2  3]
#  [ 4  5  6]
#  [ 7  8  9]
#  [10 11 12]]
print(array_a.shape) # (4, 3)

array_a = array_a.reshape(12, )
print(array_a)
# [ 1  2  3  4  5  6  7  8  9 10 11 12]
print(array_a.shape) # (12, )

array_a = array_a.reshape(6, -1)
print(array_a)
# [[ 1  2]
#  [ 3  4]
#  [ 5  6]
#  [ 7  8]
#  [ 9 10]
#  [11 12]]
print(array_a.shape) # (6, 2)


array_a = array_a.reshape(-1, 6)
print(array_a)
# [[ 1  2  3  4  5  6]
#  [ 7  8  9 10 11 12]]
print(array_a.shape) # (2, 6)

 

배열 데이터 조회 

인덱싱

요소 조회

  • 배열[행인덱스, 열인덱스]
  • 배열[행인덱스][열인덱스]

행 조회

  • 배열[행 인덱스. :]
  • 배열[행 인덱스]
  • 배열[[행1, 행2]]
  • 배열[[행1, 행2], :]

 

요소 조회 예제 코드

import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]

array_a = np.array(list_a)

print(array_a[0,0]) # 1
print(array_a[0][0]) # 1

 

행 조회 예제 코드

import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]

array_a = np.array(list_a)

print(array_a[0, :]) # [1 2 3]
print(array_a[1]) # [4 5 6]
print(array_a[[0,1]]) # [[1 2 3] [4 5 6]]
print(array_a[[0,1], :]) # [[1 2 3] [4 5 6]]

 

 

슬라이싱

  • 배열[시작:끝]
  • 배열[행인덱스, 시작:끝]
  • 배열[시작:끝, 시작:끝]
import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]

array_a = np.array(list_a)

print(array_a[0:2]) # [[1 2 3] [4 5 6]]
print(array_a[0, 0:2]) # [1 2] 
print(array_a[0:2, 0:2]) # [[1 2] [4 5]]

 

 

집계 함수

sum(), mean(), std() 모두 옵션없이 사용하면, 전체 데이터에 대한 집계가 계산된다.

  • numpy.sum() : 합계
  • numpy.mean() : 평균
  • numpy.std() : 표준편차

 

option

  • axis = 0 : 행 방향 집계
  • axis = 1 : 열 방향 집계
import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)

# no option

# numpy.sum()
# 함수로서 사용
print(np.sum(array_a)) # 78
# 메소드로서 사용
print(array_a.sum()) # 78

# numpy.mean()
# 함수로서 사용
print(np.mean(array_a)) # 6.5
# 메소드로서 사용
print(array_a.mean()) # 6.5

# numpy.std()
# 함수로서 사용
print(np.std(array_a)) # 3.452052529534663
# 메소드로서 사용
print(array_a.std()) # 3.452052529534663

# axis=0
# numpy.sum()
print(array_a.sum(axis=0)) # [22 26 30]

# numpy.mean()
print(array_a.mean(axis=0)) # [5.5 6.5 7.5]

# numpy.std()
print(array_a.std(axis=0)) # [3.35410197 3.35410197 3.35410197]


# axis=1
# numpy.sum()
print(array_a.sum(axis=1)) # [ 6 15 24 33]

# numpy.mean()
print(array_a.mean(axis=1)) #  2.  5.  8. 11.]

# numpy.std()
print(array_a.std(axis=1)) # [0.81649658 0.81649658 0.81649658 0.81649658]

 

가장 큰(작은) 값의 인덱스 반환 

  • numpy.argmax(array, axis)
  • numpy.argmin(array, axis)
  • axis 생략: 전체 데이터
  • axis 0 : 열 기준 큰 값
  • axis 1 : 행 기준 큰 값
import numpy as np

list_a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
array_a = np.array(list_a)

# 전체 데이터 중 큰 값 인덱스 조회
print(np.argmax(array_a)) # 11

# axis = 0
# 열 별로 가장 큰 값의 인덱스 조회
print(np.argmax(array_a, axis=0)) # [3 3 3]

# axis = 1
# 행 별로 가장 큰 값의 인덱스 조회
print(np.argmax(array_a, axis=1)) # [2 2 2 2]

# 전체 데이터 중 작은 값 인덱스 조회
print(np.argmin(array_a)) # 0

# axis = 0
# 열 별로 가장 작은 값의 인덱스 조회
print(np.argmin(array_a, axis=0)) # [0 0 0]

# axis = 1
# 행 별로 가장 작은 값의 인덱스 조회
print(np.argmin(array_a, axis=1)) # [0 0 0 0]

 

조건에 따라 값 지정하기 :: numpy.where

numpy.where(조건문, 참일 때 값, 거짓일 때 값)

import numpy as np

list_a = [1,2,3,4,5,6,7]
array_a = np.array(list_a)

array_a = np.where(array_a < 4, 1, 0)
print(array_a) # [1 1 1 0 0 0 0]
728x90

'Language > Python' 카테고리의 다른 글

[Pandas] 시계열 데이터 처리  (0) 2024.03.01
[Pandas] 데이터분석을 위한 데이터 전처리  (2) 2024.03.01
[Pandas] Pandas 기초  (0) 2024.03.01
[Python] List, Dictionary  (0) 2024.02.28

+ Recent posts