Python/Numpy

Numpy 01 _ (numpy 생성, ndarray 자료형)

eun_coco 2022. 8. 25. 13:34

  Numpy 란?  

- Numerical Python 의 약자로 대규모 다차원 배열과 행렬 연산을 지원해주는 파이썬의 라이브러리

- 데이터 분석을 할 때 사용되는 여러 라이브러리의 기반이 되는 라이브러리

- 기본적으로 array라는 단위로 데이터를 관리한다.

 

  Numpy ndarray  

- Numpy의 핵심 기능 중 하나로 N차원의 배열 객체를 뜻한다.

- 파이썬에서 사용할 수 있는 대규모 데이터 집합을 담을 수 있는 빠르고 유연한 자료 구조

 

  shape

- Numpy 배열 구조를 shape를 통해 표현한다.

- shape는 배열의 구조를 튜플 자료형을 이용하여 보여준다.

- .shape 멤버 변수를 통해 해당 array의 크기를 즉각적으로 확인할 수 있다.


    1. Numpy 생성    

 

  1) Numpy 불러오기

1
2
import numpy as np
 
cs

- np는 전세계적으로 통용되는 별칭

 

  2) ndarray 생성

- np.array() 함수를 활용

- 하나의 데이터 type만 배열에 넣을 수 있음

- 데이터가 정적 타입으로 구성되어 있어서 성능 면에서 좋다

1
2
3
4
5
data = [5,42.2 , 03]
print(type(data)) #<class 'list'>
 
arr = np.array(data)
print(arr)
cs

  결과

더보기

[5. 4. 2.2 0. 3. ]

 

♣ arr의 타입 확인

1
print(type(arr))
cs
더보기

# 결과

<class 'numpy.ndarray'>

♣ 리스트를 가지고 데이터형을 정수형으로 정해서 ndarray 생성

 

1
2
3
4
5
6
arr2 = np.array(data.dtype = int)
print(arr2)
 
print(arr.dtype) #float64: 실수형 자료형
 
print(arr2.dtype) #int64: 정수형 ㅏ료형
cs

결과

더보기

array([5, 4, 2, 0, 3])

float64

int64

 

 

  3) ndarray 생성 - 1차원 배열(vector)

1 2 3 4

☞ 1차원에 4개의 element가 있는 벡터

☞ 1차원 ndarray의 shape ; (4,)

1
2
3
4
5
6
7
8
vector_1d = np.array([12"3"4]
print(vector_1d) #
 
print(vector_1d.shape)
 
vector_1d = np.array(vector_1d, dtype = float)
print(vector_1d)
print(vector_1d.type)
cs
더보기
#결과
 
['1' '2' '3' '4']
(4,)
[1. 2. 3. 4.]
float64

 

 

  4) ndarray 생성 - 2차원 배열 (matrix; 행렬)

1 2 3
4 5 6
7 8 9

☞ 2차원에 9개의 element가 있는 matrix

☞ 2차원 ndarray의 shape : (3,3)

 

 

1
2
3
4
5
6
7
8
9
data = [[1,2,3], [4,5,6], [7,8,9]]
 
#2차원 ndarray 생성 (데이터형: 정수형)
matrix_2d = np.array(data, int)
print(matrix_2d)
print(type(matrix_2d))
print(matrix_2d.shape) #3개의 row, 3개의 column
print(matrix_2d.ndim) #2차원 array
print(matrix_2d.size) #9개의 데이터
cs
더보기

#결과

[[1 2 3]

[4 5 6]

[7 8 9]]

 

<class 'numpy.ndarray'>

 

(3, 3)

 

2

 

9

 

 

 

  5) ndarray 생성 - 3차원 배열(tensor)

tensor는 다차원 배열을 뜻하고, vector, matrix도 포함하는 개념이다.

1
2
3
4
5
6
7
8
9
10
11
data = [
        [[123], [456], [789]],
        [[123], [456], [789]],
        [[123], [456], [789]]
        ]
 
#3차원 ndarray 생성: 데이터형은 정수형
tensor_3d = np.array(data, int)
print(tensor_3d)
print(type(tensor_3d))
print(tensor_3d.shape)
cs
더보기

#결과

[[[1 2 3]

  [4 5 6]

  [7 8 9]]

 [[1 2 3]

  [4 5 6]

  [7 8 9]]

 [[1 2 3]

  [4 5 6]

  [7 8 9]]]

 

<class 'numpy.ndarray'>

 

(3, 3, 3)

 

 

6)

  ndim

: 배열의 차원수, 혹은 배열의 축 수

    ex) tensor_3d.ndim : 3

  size

: 전체 원소의 개수를 반환

    ex) tensor_3d.size

 

 

 

  7) arrange

- 파이썬 내장함수 range로 시퀀스형 데이터를 만들어냄

- 시퀀스 자료형(sequences types) : 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형

- numpy arange 는 ndarray를 반환한다.

- arange(start, end, step)

1
2
3
4
5
6
7
8
9
print(np.arange(10))
 
print(np.arange(030.2))
 
print(np.arange(027))
 
#배열의 모양 변경
print(np.arange(27).reshape(3,3,3))
# == np.reshape(np.arange(27), (3,3,3))
cs
더보기

#결과

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

 

[0. 0.2 0.4 0.6 0.8 1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8]

 

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]

 

[[[ 0 1 2]

  [ 3 4 5]

  [ 6 7 8]]

 [[ 9 10 11]

  [12 13 14]

  [15 16 17]]

 [[18 19 20]

  [21 22 23]

  [24 25 26]]]

 

 

 

8)

  zeros

: 0으로 가득찬 array를 생성

    ex) np.zeros(shape = (10,)) #결과: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

 

  ones

: 1로 가득찬 array 생성

    ex) np.ones(shape=(10,)) #결과: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

 

  empty

: 메모리를 할당하여 새로운 배열을 생성하나 memory를 초기화하지 않는다.

- 특정한 값으로 초기화하지 않는 배열 생성

- 빠른 속도로 배열 생성이 가능함

 

  full

: 지정된 shape의 배열을 생성하고, 모든 요소를 지정한 fill_value로 초기화

    ex) np.full(5,7) #결과: array([7,7,7,7,7])

    ex) np.full([2,3], 7) #결과: array([[7,7,7],

                                                        [7,7,7]])

 

 

 

  9) something_like

: 기존 ndarray의 shape크기만큼 1 or 0 or empty array 반환

- ones_like / zeros_like / full_like / empty_like

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
print('배열 생성')
t_matrix = np.arange(6)
print(t_matrix)
 
print('\n재배열')
t_matrix = t_matrix.reshape(2,3)
print(t_matrix)
 
print('\nones_like')
print(np.ones_like(t_matrix))
 
print('\nzeros_like')
print(np.zeros_like(t_matrix))
 
print('\nfull_like')
print(np.full_like(t_matrix, 16))
 
print('\nempty_like')
print(np.empty_like(t_matrix))
cs

결과

 

 

 

  10) identity()

: 대각 행렬, 즉 대각선이 1인 정사각 행렬을 만들어서 반환한다.

+ identity matrix : 단위 행렬 혹은 항등행렬

 

    ex) np.identity(n = 3) : 3*3의 identity 행렬 생성

결과

 

 

 

  11) eye

: N * M 크기의 행렬을 생성 후, 대각선이 1로 채워진 행렬을 생성한다.

- k 옵션에 따라 1의 시작점이 변경됨

1
2
3
4
5
6
print(np.eye(N = 2, M = 3))
print()
print(np.identity(4))
print()
#3*5 행렬을 만든 후, 2번째 열부터 시작하여 1을 대각선으로 입력하고, 나머지는 0으로 채움
print(np.eye(3,5, k = 2))
cs

결과

 


  2. ndarray 자료형  

- 자료형(dtype)은 ndarray가 데이터를 메모리에서 해석하기 위해 필요한 정보를 담고 있는 특수한 객체이다.

- ndarray의 각각의 요소가 가지는 data type 을 통해 memory 크기가 결정된다.

- nbyte: ndarray object의 메모리 크기 리턴

 

- float32 : 실수형 (정밀도 부동소수점형) (부호 1비트, 지수 8비트, 가수 23비트)

- float16 : 실수형 (반 정밀도 부동소수점형) (부호 1비트, 지수 5비트, 가수 10비트)

- int8 : 부호 있는 8비트 정수형

 

1
2
3
4
5
6
7
8
9
10
11
data = [[42.56.5], [13.124]]
 
#float32 : 실수형(정밀도 부동소수점형) (부호 1비트, 지수 8비트, 가수 23비트)
t_matrix = np.array(data, dtype = np.float128)
print(t_matrix)
print(t_matrix.nbytes)
print()
#float16 : 실수형(반 정밀도 부동소수점형) (부호 1비트, 지수 5비트, 가수 10비트)
t_matrix2 = np.array(data, dtype = np.float16)
print(t_matrix2)
print(t_matrix2.nbytes)
cs

결과