Python/이론

106. [Python] 프로그래밍 기본 사항 : NUMPY BASICS

천재단미 2025. 1. 21. 16:39
728x90
반응형

NUMPY

 

 

 

 

목차 ▽열기

 

스크린샷 2025-01-21 오후 2

 

Numpy란 무엇인가?

  • Numpy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리입니다.
  • 데이터 분석 및 과학 연산에서 매우 중요한 역할을 합니다.
  • Numpy를 설치하려면:를 실행하세요.

conda install numpy

 

스크린샷 2025-01-21 오후 11

 

 저의 경우 기존 jupyter notebook 설치시 pandas와 같이 설치완료 하였습니다. 😁

 

 

1. Numpy 배열의 구조 이해하기

  • Numpy 배열은 1D, 2D, 3D와 같은 다양한 차원을 지원합니다.
  • 아래 이미지는 1D 배열, 2D 배열, 3D 배열의 구조와 shape를 보여줍니다.

스크린샷 2025-01-21 오후 2

 

 

 

2. Python에서 Numpy 배열 생성

  • Numpy 배열을 생성하는 가장 기본적인 방법:
  • 리스트와 배열의 차이를 이해하세요. Numpy 배열은 다양한 연산벡터화를 지원합니다.

스크린샷 2025-01-21 오후 11

 

 

 

3. 배열 속성 확인하기

  • len(), size, shape, dtype를 사용하여 배열의 속성을 확인할 수 있습니다.
len(x)  # 길이
x.size  # 전체 요소 개수
x.shape # 배열 구조
x.dtype # 데이터 타입

 

스크린샷 2025-01-21 오후 11

 

 

4. 배열 저장 및 로드

  • 배열 데이터를 저장하고 다시 불러올 수 있습니다:
np.save("my_array", x)
y = np.load("my_array.npy")

스크린샷 2025-01-21 오후 11
스크린샷 2025-01-21 오후 11
스크린샷 2025-01-21 오후 9

 

위와 같이 저장 확인이 가능합니다. CRUD가 가능합니다. 😎

 

 

5. Numpy 내장 함수 활용

  • 배열을 생성하는 다양한 방법:
    • 0으로 채워진 배열: np.zeros((6,  ))
    • 1로 채워진 배열: np.ones((4, 7))
    • 특정 값으로 채우기: np.full((3, 5), 8)

스크린샷 2025-01-21 오후 11

 

 

 

6. 정수 배열 생성

6-1. 정수 배열을 생성하기

np.arange(10)  # 0~9
np.arange(5, 21, 2)  # 5~20까지 2 간격으로

스크린샷 2025-01-21 오후 11

 

6-2. 특정 범위의 정수 배열을 생성하기

# 기존 range의 경우 값을 재확인해야하는 어려움이 있음 
range(1, 10+1, 2)  # 0~9 까지중 홀수 
range

# np.arange의 경우 바로 확인이 가능함 
np.arange(1, 10+1, 2)

스크린샷 2025-01-21 오후 11

 

 

 

6-3. 정수 말고 실수를 얻고자 할때 

np.linspace(0, 1, num=5)

스크린샷 2025-01-21 오후 11

 

 

 

 

7. 배열의 Reshape

Reshape는 NumPy 배열의 차원과 형태를 변경하는 강력한 기능입니다. 이 함수를 사용하면 배열의 데이터를 유지하면서 원하는 차원과 모양으로 재구성할 수 있습니다.

스크린샷 2025-01-21 오후 11

 

Reshape 함수는 다음과 같이 사용할 수 있습니다

  1. np.reshape(변경할_배열, 새로운_차원)
  2. 배열.reshape(새로운_차원)
x = np.arange(20)
x.reshape(4, 5)  # 4x5 배열로 변환

 

출력

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

스크린샷 2025-01-21 오후 11

 

 

 

 

8. 랜덤 값으로 채워진 배열 생성

  • random.random(): 0과 1 사이의 임의의 실수를 반환.
  • np.random.random(): Numpy 버전의 랜덤 함수로 배열 생성 가능.
  • 배열 생성 예시:결과: 0과 1 사이의 10개의 랜덤 값 배열.
np.random.random(10)

 

출력

array([0.37304885, 0.68649758, 0.12757049, 0.26184397, 0.17595956,
       0.44184265, 0.63074801, 0.43534603, 0.82459772, 0.08948643])

스크린샷 2025-01-21 오후 11

 

참조

random.random()의 ()안에 숫자를 입력하면 오류가 발생하지만 

np.random.random() 순자를 유무의 상관이 없습니다. 😊

 

 

 

 

9. 시작값과 끝값을 지정한 랜덤 정수 생성

  • np.random.seed(): 랜덤 값 고정.
  • np.random.randint(start, stop, shape): 정수 배열 생성.
  • 예:
    • 1부터 100 사이의 숫자로 채운 4x5 배열 생성.
np.random.randint(1, 100, (4, 5))

 

출력

array([[74, 80, 57,  5, 49],
       [36, 61, 99, 75, 73],
       [64, 45, 62, 49, 85],
       [60, 21, 77, 57, 42]])

 

 

random 이 random 아니다?!

 

np.random.seed() 

()의 동일한 숫자를 입력하면 같은 렌덤 숫자라 추출됩니다. 

np.random.seed(21)
np.random.randint(1, 100, (4,5) )

결과 
array([[74, 80, 57,  5, 49],
       [36, 61, 99, 75, 73],
       [64, 45, 62, 49, 85],
       [60, 21, 77, 57, 42]])

스크린샷 2025-01-21 오후 11

 

 

 

 

10. 배열의 최대값, 최소값 및 통계 정보

  • X.max(), X.min(): 배열의 최대값 및 최소값 반환.
  • X.sum(), X.mean(), X.std(): 합, 평균, 표준 편차 계산.
X.max() 
X.sum()
X.min()
X.std()  # 전체 합계 평균

 

출력

:  99

:  979

:  6

:  31.3902453...

스크린샷 2025-01-21 오후 11

 

축(axis)을 지정하여 연산 가능 : 결과 :  행별 최대값, 열별 최소값.

스크린샷 2025-01-21 오후 11

 

 

 

11. 조건을 활용한 필터링

  • 조건을 사용하여 배열 내 데이터를 필터링:결과: 배열에서 70보다 큰 값들만 반환.
X[X > 70]

 

출력

array([[ 6, 19, 71, 51, 57],
       [99, 49, 54,  6, 81],
       [36, 92, 34, 13, 83],
       [16,  7, 85, 91, 29]])

 

  • 조건 결과의 합계:
(X > 70).sum()

 

출력

array([71, 99, 81, 92, 83, 85, 91])

스크린샷 2025-01-21 오후 11

 

 


12. 최대값과 최소값의 위치

  • X.argmax(), X.argmin(): 배열에서 최대/최소값의 인덱스 반환.
  • 인덱스를 사용한 데이터 접근:
  • X[1, 2] # 1행 2열 데이터

스크린샷 2025-01-22 오전 12

 

 

 

13. Slicing 

 

13-1. 배열 자르기 : Slicing

  • 배열에서 원하는 부분을 선택:
  • python 복사편집 X[start:end]
  • 2차원 배열에서는 행과 열을 지정하여 자르기:결과: 12행, 23열의 데이터 반환.

코드:

X = array([10, 81,  1,  6, 70, 58,  5])
X[ 0 : 3 ]
X[   : 3 ]   # 위와 같은 것입니다. 
x[ 2 : 3 ]

 

출력

:  [10, 81, 1]

:  [10, 81, 1]

:  [1, 6, 70, 58, 5]

스크린샷 2025-01-22 오후 1

 

13-2. 다차원 배열에서 Slicing

다차원 배열에서 Slicing은 각 축(axis)에 대해 적용됩니다.

 

코드:

import numpy as np

X = np.array([
    [2, 4, 6, 8],
    [10, 12, 14, 16],
    [18, 20, 22, 24],
    [26, 28, 30, 32]
])

 

  • 행과 열 동시 Slicing

코드:

X[ 0:2, 0:2 ]

 

출력 

[[ 2,  4],
 [10, 12]]

 

  • 특정 영역 Slicing

코드:

[ [ 20, 22 ], [ 28, 30 ] ]

 

 

출력

X[ 2:  , 1 : 3 ]

 

스크린샷 2025-01-22 오후 1

 

 

 

 

14. Arithmetic Operations and Broadcasting

  • 1차원 배열:
  • score_list = [77, 46, 24, 99, 87] new_list = [x - 7 for x in score_list]
  • 2차원 배열:
  • score = np.arange(2, 33, 2).reshape(4, 4) score ** 2

스크린샷 2025-01-22 오전 12
스크린샷 2025-01-22 오전 12

 

 

 

실습

1. 배열 생성과 연산

  • 4x4 ndarray를 생성하고 2~32까지 짝수로 채우기:결과:
[[ 2,  4,  6,  8],
 [10, 12, 14, 16],
 [18, 20, 22, 24],
 [26, 28, 30, 32]]

 

X = np.arange(2, 33, 2).reshape(4, 4)

 

스크린샷 2025-01-22 오전 12

 

 

 

728x90
반응형
home
}