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,4, 2.2 , 0, 3]
print(type(data)) #<class 'list'>
arr = np.array(data)
print(arr)
|
cs |
결과
[5. 4. 2.2 0. 3. ]
♣ arr의 타입 확인
♣ 리스트를 가지고 데이터형을 정수형으로 정해서 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([1, 2, "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 |
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 = [
[[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]]
]
#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(0, 3, 0.2))
print(np.arange(0, 27))
#배열의 모양 변경
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 = [[4, 2.5, 6.5], [1, 3.12, 4]]
#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 |
'Python > Numpy' 카테고리의 다른 글
Numpy 03_ 배열 재형성, indexing, 배열 복사, 배열 데이터 다루기 (0) | 2022.09.04 |
---|