티스토리 뷰
파이썬 numpy를 를 사용하기 위해 가장 먼저 numpy가 생성하는 배열을 이해하는 것이 필요합니다. numpy를 이용하여 배열을 생성하는 방법은 매우 다양합니다. 2차원 배열로 생성도 가능하며, 그 이상의 다차원 배열 생성도 가능합니다. 또한 기존의 배열을 재조합하여 새로운 배열을 생성하는 것도 가능합니다.
파이썬 numpy 배열 생성
numpy 기본 배열 생성
2차원, 3차원 배열 생성
배열 재구성
- reshape
- vstack, hstack
- split
numpy 기본 배열 생성
numpy를 이용하여 가장 기본적인 배열들을 생성하는 방법들에 대해 알아보도록 하겠습니다. numpy의 배열 생성 관련 메서드는 배열의 값을 모두 0으로 채워주는 메서드, 모두 1로 채워주는 메서드 등등 여러 가지를 제공하고 있습니다. 아래는 numpy에서 제공하는 기본 배열 생성 메서드입니다
- np.array() : 기본적인 배열을 생성
- np.zeros() : 0으로 채워진 배열 생성
- np.ones() : 1로 채워진 배열 생성
- np.eye() : 단위행렬 형태의 배열 생성
- np.empty() : 초기 요소가 무작위 데이터로 채워진 배열 생성
- np.arange(start, end, step) : 범위가 있는 배열 생성, 각 요소 지정 시 원하는 step별로 값을 지정가능
import numpy as np
#1
temp = np.array([1,2,3])
#2
temp = np.zeros(4)
temp = np.ones(4)
temp = np.eye(4)
temp = np.empty(4)
#3
temp = np.arange(4)
temp = np.arange(3,13,3)
#1 실행결과
[1, 2, 3]
#2 실행결과
[0. 0. 0. 0.]
[1. 1. 1. 1.]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
[5.e-324 4.e-323 4.e-323 4.e-323] // 매번 값이 달라짐
#3 실행결과
[0, 1, 2, 3]
[3, 6, 9, 12]
2차원, 3차원 배열 생성
numpy는 1차원 배열부터 2차원 3차원까지 확장 가능합니다. 3차원 배열의 경우 아래와 같이 정의할 수 있습니다.
- 아래 선언한 temp라는 배열은 아래와 같이 생성됩니다
- temp.shape = ( 3, 2, 4 )
- 즉, temp 배열은 2행 4열의 배열이 3층으로 존재하는 형태입니다.
- 그리고 temp 배열의 모든 요소의 개수는 3x2x4 = 24개입니다.
temp = 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("배열의 차원 수 : temp.ndim")
print("배열의 모양 : temp.shape")
print("배열의 총 요소 수 : temp.size")
실행 결과
배열의 차원 수 : 3
배열의 모양 : (3, 2, 4)
배열의 총 요소 수 : 24
배열이 행과 열이 정의되는 방법에 대해 확인하였으니 본격적으로 2차원 및 3차원 배열을 생성하는 방법은 말씀드리겠습니다.
import numpy as np
#1
a = np.arange(24).reshape(4,6)
print(a)
#2
b = np.arange(24).reshape(3,4,2)
print(b)
#1 실행결과
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
#2 실행결과
[[[ 0 1] [ 2 3] [ 4 5] [ 6 7]]
[[ 8 9] [10 11] [12 13] [14 15]]
[[16 17] [18 19] [20 21] [22 23]]]
배열 재구성
배열의 모양을 구성할 수 있으니, 이제 배열을 재구성을 해보도록 하겠습니다. 배열의 재구성은 reshape 메서드를 이용합니다. 아래 temp1이라는 1차원 배열을 2차원 배열로 재구성해보도록 하겠습니다.
temp1 = np.arange(6)
temp1 = temp1.reshape(2,3)
print(temp1)
실행 결과
[[0 1 2]
[3 4 5]]
먼저 temp1의 배열을 생성하면 [0 1 2 3 4 5]의 형태로 1차원 배열로 생성이 됩니다. 이후 reshape 메서드를 활용하여 2행 3열의 배열 형태로 재구성하였습니다. 이러한 방식으로 배열의 형태를 재구성할 수 있습니다.
그리고 다음 소개드릴 예제는 vstack, hstack 메서드를 이용하여 두 개의 배열을 하나로 합치는 방법에 대해 말씀드리겠습니다. 방법은 아래와 같으며 이를 파이썬 numpy로 구현하는 방법입니다.
import numpy as np
a = np.array([[0, 0, 0, 0],
[1, 1, 1, 1]])
b = np.array([[2, 2, 2, 2],
[3, 3, 3, 3]])
#1
c = np.vstack((a,b))
print(c)
#2
d = np.hstack((a,b))
print(d)
#1 실행 결과
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]]
#2 실행 결과
[[0 0 0 0 2 2 2 2]
[1 1 1 1 3 3 3 3]]
이번에는 기존 배열을 split함수로 잘라 새로운 배열을 구성하는 방법에 대해 확인해보겠습니다. 먼저 split함수도 vsplit과 hsplit으로 나누어 사용할 수 있습니다. vspilt함수는 아래와 같이 사용할 수 있습니다.
import numpy as np
a = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3, 3]])
#1
b = np.vsplit(a,2)
print(b)
#2
c = np.vsplit(a,(1,2))
print(c)
#1 실행 결과
[array([[0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1]]), array([[2, 2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3, 3]])]
#2 실행 결과
[array([[0, 0, 0, 0, 0, 0, 0, 0]]), array([[1, 1, 1, 1, 1, 1, 1, 1]]), array([[2, 2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3, 3]])]
vsplit은 위와 같이 동작합니다. #1의 실행결과는 생성된 배열 a를 2개의 동일한 크기의 배열로 나누는 것입니다. 그리고 #2의 경우는 (1,2)로 표현하여, 1열 전 2열 후 배열을 분리하여 나타낸 것입니다. 즉, 이와 같이 사용하여 기존의 배열을 split 하여 새로운 배열을 생성할 수 있습니다.
'소프트웨어 > 파이썬' 카테고리의 다른 글
파이썬 pandas를 이용하여 데이터 생성하기 (0) | 2022.03.28 |
---|---|
파이썬 numpy 배열 연산 알아보기 (0) | 2022.03.26 |
파이참에서 numpy 설치하는 방법 (0) | 2022.03.24 |
파이썬 자료구조 딕셔너리 알아보기 (0) | 2022.03.23 |
파이썬 자료구조 튜플, 리스트, 집합 (0) | 2022.03.22 |