2025.03.23(일) 슈퍼코딩 AI/DATA Day 20 일일보고 - 라이브러리_NumPy 기초

Honey_Bunny·2025년 3월 23일

슈퍼코딩

목록 보기
18/23

NumPy - Numerical Python


  • Python 기초
    • 데이터 타입
    • Python 문법 기초
    • Python 심화
  • 데이터 조작을 위한 라이브러리
    • NumPy
    • pandas

NumPy


https://numpy.org/ : numpy의 리소스가 많이 있음.

  • Numerical Python

  • 행렬과 매트릭스를 코드에서 잘 사용하기 위해 Numpy가 필요하다


행렬을 어떻게 코드에서 표현할까?


행렬을 어떻게 코드에서 표현할까?

  • 다양한 Matrix 연산처리 방법
  • 큰 Matrix 표현의 문제
  • 처리속도 문제

list로 행렬을 표현 시 어떤 것으로 써도 별 차이 없을 수 있지만, 몇백만개가 들어갔을 때 문제가 달라진다./ 데이터가 많아지면, 내부적으로 각각의 메모리 할당을 해줘야하기 때문에 비실용적이다.
그런 문제를 해결 하기 위해 "행렬과 매트릭스를 코드에서 잘 사용하기 위해 Numpy가 필요하다"


NumPy의 특징


  • Numerical Python
  • 고성능 과학 계산용 패키지 (Scipy와 함께 사용)
  • Matrix와 vector 같은 연산에 최적화
  • List에 비해 매우 빠르다
  • 메모리에 효율적으로 관리
  • 선형대수와 관련된 다양한 함수를 제공
  • 반복문 없이 배열 데이터 처리를 지원

NumPy 사용하기

  • NumPy를 사용하기 위해서는 먼저 패키지를 설치해야 한다
  • 일반적으로 np라는 alias를 사용한다

NumPy Array : ndarray

  • np.array() 함수를 사용하여 NumPy 배열 데이터 생성
  • Dynamic Typing Not Supported
  • 하나의 배열에는 하나의 데이터 타입만 가능

ndarray안에 list들어간 것처럼 표현해줘야 한다
ndarray는 생성 할 때 마다 데이터 타입인지 지정을 해줘야 한다
Python의 list 사용하기는 매우 편하고 좋지만 느리다, 메모리를 목적에 맞게 사용하지만, Numerical Calculation(숫자계산)하기에는 비효율적이다
Dynamic Typing 포기를 함으로, 모든 array(배열)는 똑같은 종류의 데이터만 들어가야만 한다.


NumPy Array : ndarray

  • 문자열 및 다른 Type도 정해진 Data Type으로 변환 시도한다

list에 여러가지 타입이 들어갔다고 하더라도 해당 타입으로 자동 변환을 시도한다
문자열이 들어가면 에러가 나고, 지정해준 타입으로 초기화 한다
다른 타입으로 작성했더라도 지정해준 타입으로 1차적으로 변환을 시도한다. 초기화 한다
ndarray로 함수로 초기화 된 array는 타입이 전부 다 ndarray이다


ndarray : shape, dtype

  • np.shape : ndarray의 dimention
  • np.dtype : ndarray의 데이터 타입

np.dtype : ndarray의 데이터 타입을 리턴한다
np.shape : ndarray의 데이터 dimention을 리턴한다
"," 다음 것이 없다라는 뜻이며, shape은 항상 튜플이의 형식을 띄고 있다


ndarray.shape

  • Array의 차원(Rank)에 따라 불리는 이름

0차원 : scalar(스칼라)
1차원 배열 : vector(벡터)
2차원 배열 : matrix(매트릭스) - 행렬
3차원 배열 : 3-tensor(텐서) - 행렬이 여러개 겹쳐있는 경우
n차원 배열 : n-tensor(텐서)


ndarray.shape - vector

1차원 배열을 나열한 것
ndarray의 shape는 ndarray(배열)의 갯수로 나타낸다. = (4, )


ndarray.shape - matrix

2차원 배열의 나열한 것
(행, 열) = ( y, x ) = y(세로방향), x(가로방향)
axis = 0, 1
dtype에 아무것도 없으면 float이다 **


ndarray.shape - tensor (3rd order)

3차원 행렬이다
matrix가 여러개 겹쳐있는 것이다
( 축, 행, 열 ) = ( z, y, x ) = ( z(축의 방향), y( 세로방향 ), x( 가로방향 ) )
축(z) = 겹쳐져서 안 보이는 배열을 0으로 시작한다 ( 예시 : 0, 1, 2 )
axis = 0, 1, 2
4차원 예시 : ( 0, z, y, x) 뒤에 z, y, x가 고정된다


ndarray : ndim, size

  • np.ndim : ndarray의 number of dimentions
  • np.size : ndarray의 데이터 갯수

np.ndim : ndarray(tensor)의 차원을 리턴
np.size : ndarray(tensor)의 갯수


ndarray.nbytes

  • np,nbytes : ndarray의 메모리 샤용량 (bytes)

int, float의 기본 bit는 64비트이다
8개를 묶어서 byte라고 한다
bytes로 부를 수 있는 것은 0~(16진수로)ff까지이며, bytes의 총 갯 수는 256개이다 ( 0 ~ 255까지 )
integer 하나를 나타내는 데 필요한 bytes는 8바이트이다
tensor.size : tensor의 갯수
tensor.nbytes : integer하나 당 필요한 8바이트 x tensor의 갯수 = tensor.nbytes이다


ndarray : data types

numpy 사이트 들어가서 보는 것이 정확하다 ( 계속 버전이 업그레이드 되기 때문에 )
Unsigned Integer는 데이터가 +로만 이루어져 있고, "-" 데이터가 없는 경우 굳이 메모리 한개를 버릴 필요가 없기 때문에, uint type으로 사용한다.
bytes를 모르는 경우 void로 사용


ndarray.nbytes

  • 데이터 타입에 따라 메모리 사용량이 달라진다
>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], int).nbytes   #np.int64
64 bit = 8 bytes; 8 bytes * 9 = 72 bytes
>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], np.int32).nbytes
32 bit = 4 bytes; 4bytes * 9 = 36 bytes
>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], float).nbytes   #np.float64
64 bit = 8 bytes; 8 bytes * 9 = 72 bytes

profile
현재 : C# WPF 개발자 / 목표 : AI 의료 영상 분석 연구원

0개의 댓글