hgk0404
hgk0404.tistory
hgk0404

공지사항

전체 방문자
오늘
어제
  • 전체 카테고리
    • [컴퓨터비전]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [자격증, 일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404

hgk0404.tistory

[Numpy] 파이썬 Numpy란? shape(axis), ndim, size, reshape
[머신러닝]/[Numpy, Pandas]

[Numpy] 파이썬 Numpy란? shape(axis), ndim, size, reshape

2023. 6. 13. 10:31
728x90

1. numpy란?

2. ndarray

3. array의 형태

4. shape

5. ndim/size

6. dtype

7. reshape

1. numpy란?

 

파이썬 Numpy란 numerical python의 줄임말로 파이썬에서 수학적 처리를 도와주는 라이브러리입니다.

 

특히, numpy에선 다차원 배열의 계산에 대해 간편한 기능을 제공합니다.

 

1. python3 버전 확인

python3 --version

 

2. pip3 버전 확인

pip3 --version

# pip가 설치 안되어 있다면 설치하기
pip install

 

3. pip3로 numpy 설치

pip3 install numpy

 

넘파이 설치 성공

 

2. ndarray

 

넘파이에선 특수한 어레이(array)를 사용하는데 ndarray를 사용합니다.

 

ndarray는 n-dimension-array를 의미합니다. 즉, 여러가지 차원을 다루는 배열이라고 생각할 수 있습니다.

 

# 넘파이 라이브러리 불러오기
import numpy as np

 

np.array() 메서드를 이용하여 ndarray를 생성할 수 있습니다.

 

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

(모든 결과는 주피터 노트북에서 실행되었습니다.)

# 2차원 Array
x = np.array([[1,2,3,4], 
                [5,6,7,8]
])
print(x)

 

실행결과

[[1 2 3 4]
 [5 6 7 8]]

 

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

 

실행결과

[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

 

3. Array의 형태

 

https://www.programsbuzz.com/sites/default/files/inline-images/3D-Banner.jpg

 

넘파이의 배열에는 축(axis)이라는 개념이 있습니다. 

1차원 배열 - 축(axis) : 0으로 구성 / Vector라고 부름

2차원 배열 - 축(axis) : 0, 1으로 구성 / Metrix라고 부름

3차원 배열 - 축(axis) : 0, 1, 2로 구성 / Tensor라고 부름

 

axis=0은 2차원 배열에서 각 열의 모든 행에서 적용되고, aixs=1은 2차원 배열에서 각 행의 모든 열에서 적용됩니다.

aixs= 0은 행 방향(가로 방향)으로 행들이 쌓이면, 세로로 쌓일 수 밖에 없다. 책이 쌓이는 방향으로 생각할 수 있다.

aixs=1은 열 방향(세로 방향)으로 열들이 쌓이면, 가로로 쌓이게 된다. 서랍이 쌓이는 것과 같다. 

 

aixs=0과 axis=1은 화살표 방향 대로 연산이 진행됩니다.

 

 

 

4. Shape

 

shape메서드를 이용해서 그 어레이의 형상을 알 수 있습니다. 형상이란 N차원 배열에서 각 차원의 크기를 의미합니다.

 

arr = np.array([1, 2, 3]) #1차원 배열
print(arr.shape)

>>> (3,)

1차원 배열에서 (m, )은 m칸으로 구성된 1차원 배열이라는 뜻입니다. 즉, 1차원 배열이고 (3, )이 나왔으니 열이 3개이고, 총 칸의 수도 3개 입니다.

 

arr2 = np.array([[1, 2, 3],
		[4, 5, 6]]) #2차원 배열
print(arr2.shape)
print(arr2.sum(axis=0))
print(arr2.sum(axis=1))
>>> (2, 3)
>>> [5 7 9]
>>> [ 6 15]

2차원 배열에서의 (m, n)는 m행 n열로 구성된 2차원 배열을 의미합니다.

sum(axis=0)에서 axis=0은 행 위치를 따라가는 방향이므로 컬럼끼리 덧셈이 되어 "1+4= 5"가 됩니다.

또한 sum(axis=1)은 열 위치를 따라가는 방향이므로 행끼리 덧셈이 되어 "1+2+3=6"이 됩니다.

 

x = np.array([
    [[1,2], [3,4]],
    [[5,6], [7,8]],
])
print(x.shape)

>>> (2, 2, 2)

3차원 배열에서는 (층, 행, 열)로 표현됩니다. 위와 같은 경우의 행렬은 2층 2행 2열 형상입니다.

 

✦ 정리하면 1차원은 (열, ) 2차원은 (행, 열) 3차원은 (층, 행, 열)로 표현됩니다.

 

5. ndim/size 확인하기

ndim은 해당 배열의 차원, size는 해당 배열의 칸 수를 알 수 있습니다.

 

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

print(x.ndim)
print(x.size)

>>> 3
>>> 8

ndim으로 3차원 배열임을 알 수 있고, size로 총 원소의 수가 8개임을 알 수 있습니다.

 

x = np.array([[[0, 1, 2, 3],
               [4, 5, 6, 7]],

             [[0, 1, 2, 3],
              [4, 5, 6, 7]],

             [[0 ,1 ,2, 3],
              [4, 5, 6, 7]]])
print(x.ndim)
>>> 3

print(x.shape)
>>> (3, 2, 4)

print(x.size)
>>> 24

 

6. dtype

dtype은 배열의 데이터 타입을 알려줍니다. 또한 배열의 데이터 타입을 직접 지정할때도 사용할 수 있습니다.

 

arr = np.array([1.1, 2.2, 3.3])
print(arr.dtype)
>>> float64

arr = np.array([1.1, 2.2, 3.3], dtype=int)
print(arr)
>>> [1 2 3]

print(arr.dtype)
>>> int32

정직하게 출력하면 float(실수)가 나오는것을 알 수 있습니다. 두번째는 dtype=int로 설정해줘서 정수값이 나오게 됩니다.

 

arr = np.array([1, 2, 3, 0], dtype=bool)
print(arr)
>> [True True True False]

숫자형 자료를 bool타입으로 변경했습니다.

 

또한 숫자를 문자형(string)으로 바꿀 수도 있습니다.

 

다만 문자를 숫자로 바꾸는 것은 할 수 없습니다.

 

7. reshape

reshape 함수는 ndarray의 차원과 모양을 바꿔줍니다.

단, ndarray만 형태 변환을 해줄 수 있습니다. 그래서 list, range, tuple등은 np.array()등의 작업을 거쳐줘야 합니다.

 

1. reshape 함수는 본래의 원형을 유지시킨다.

x = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
x = np.array(x) # ndarray로 변경

print(x.reshape(4, 5))
>>> [[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]]

print(x.reshape(2, 2, 5))
>>> [[[ 1  2  3  4  5]
  [ 6  7  8  9 10]]

 [[11 12 13 14 15]
  [16 17 18 19 20]]]

print(x) # 원래 모양 유지
>>> [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20]

 

2. reshape에 매개변수 -1을 넣는 경우

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

print(x.reshape(4, -1)) # 데이터 개수 20개 = 4개의 행 x (?)개의 열
print(x.reshape(4, -1).shape) # 크기를 맞춰야 하기 때문에 -1에는 5가 들어감
>>> [[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]]
>>> (4, 5)

print(x.reshape(2, 5, -1)) # 데이터 개수 20개 = 3차원 층(2) x 2차원 행(5) x 1차원 열(?)
print(x.reshape(2, 5, -1).shape) # 크기를 맞춰야 하기 때문에 열에는 2가 들어감
>>> [[[ 1  2]
  [ 3  4]
  [ 5  6]
  [ 7  8]
  [ 9 10]]

 [[11 12]
  [13 14]
  [15 16]
  [17 18]
  [19 20]]]
>>> (2, 5, 2)

print(x.reshape(-1)) # 1차원(?) -> 20이 된다.
>>> [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20]

 

✦ 2차원이나 3차원 배열을 만들때는 -1을 하나의 매개 변수에 넣는다면 세 수를 곱해서 총 데이터의 개수가 되도록 하면 됩니다.

 

 

 

728x90
저작자표시 (새창열림)

'[머신러닝] > [Numpy, Pandas]' 카테고리의 다른 글

[Numpy] np.arange 사용법과 range와의 차이  (0) 2023.06.16
[Pandas] 판다스 설치  (0) 2023.06.15
[Numpy] list와 tuple 자료형의 차이  (0) 2023.06.14
[Numpy] 파이썬 list comprehension  (0) 2023.06.14
[Numpy] Broadcasting이란? (브로트 캐스트 규칙)  (0) 2023.06.13
'[머신러닝]/[Numpy, Pandas]' 카테고리의 다른 글
  • [Pandas] 판다스 설치
  • [Numpy] list와 tuple 자료형의 차이
  • [Numpy] 파이썬 list comprehension
  • [Numpy] Broadcasting이란? (브로트 캐스트 규칙)
hgk0404
hgk0404
공부기록

티스토리툴바