지난 게시글에서 Numpy Array를 생성하는 몇 가지 함수에 대해 정리하였다. (zeros, ones, full, eye)

 

간단히 복습

np.zeros() : 모든 값이 0인 array 생성

np.ones() : 모든 값이 1인 array 생성

np.full() : 모든 값이 n인 array 생성

np.eye() : 우하향 대각선이 1인 n 크기의 정방형 array 생성

 

이번 게시글에선 np.arange(), np.reshape()을 예제로 실습해보며 익혀보자.

 

np.arange()

지정해준 범위에 대해 array를 생성한다. (Python range() 와 비슷하다.)

np.arange(시작, 끝, 간격, 데이터타입)을 parameter로 지정할 수 있다.

import numpy as np
array1=np.arange(4)
array2=np.arange(3,8)
array3=np.arange(2,20,5)

print(array1)
print(array2)
print(array3)
[0 1 2 3]
[3 4 5 6 7]
[2 7 12 17]

array1은 0~3까지의 1차원 배열이다.

array2는 3~7까지의 1차원 배열이다.

array3은 2~19까지 5씩 커지는 1차원 배열이다.

 

np.reshape()

이름에서 알 수 있듯이 모양을 다시 잡는다는 뜻으로 ndarray를 다차원으로 변형한다.

np.reshape(행,열)

array1=np.arange(10).reshape(2,5)
print(array1)
[[0 1 2 3 4]
 [5 6 7 8 9]]

np.arange(10)으로 길이가 10인 배열을 만들고 바로 reshape(2,5)를 적용해서 2X5 2차원 배열로 변형했다.

 

array1=np.array([1,2,3,4,5,6]).reshape(2,3)
print(array1)
[[1 2 3]
 [4 5 6]]

np.array([1,2,3,4,5,6])으로 1차원 배열을 만든 뒤 reshape(2,3)을 적용해서 2X3 2차원 배열로 변형했다.

ndarray이기만 하면 변형이 가능하다.

 

2차원 이상인 배열을 1차원으로 만드는 것도 가능할까?

array1=np.full((4,3),4)

print(array1)
print(array1.reshape(12,))
[[4 4 4]
 [4 4 4]
 [4 4 4]
 [4 4 4]]
[4 4 4 4 4 4 4 4 4 4 4 4]

4로 이루어진 4X3 2차원 배열을 길이가 12인 1차원 배열로 변형했다.

즉, 고차원에서 저차원 배열로의 변형도 가능하다.

 

이렇게 zeros, ones, full, eye, arange, reshape 등 여러 가지 numpy array를 만드는 함수의 기본적인 사용법을 알아보았다.

 

다음엔 만든 Array를 다루는 방법들에 대해서 알아보자.

 

참고 URL

https://wikidocs.net/32829

 

 

 

 

 

Array를 생성하기 위해 np.array() 함수를 사용했었지만 템플릿처럼 ndarray를 만드는 방법도 있다.

 

다음 함수들의 대한 설명을 확인해보자.

 

np.zeros() : 모든 요소가 0인 배열을 생성한다.

np.ones() : 모든 요소가 1인 배열을 생성한다.

np.full() : 모든 요소가 n인 배열을 생성한다.

np.eye() : 대각선이 1이고 나머지가 0인 배열을 생성한다.

 

np.zeros()

모든 요소가 0인 2차원 배열을 생성한다.

#모든 요소가 0인 2X3 배열 만들기
a=np.zeros((2,3))
print(a)
[[0. 0. 0.]
 [0. 0. 0.]]

0으로 이루어진 2X3 배열이 생성되었다.

근데 0 값이 정수가 아닌 소수이다.

Default로 소수 값이 데이터 타입으로 지정이 되는데, 변경할 수도 있다.

a=np.zeros((2,3),dtype=int)
print(a)
[[0 0 0]
 [0 0 0]]

dtype parameter에 int type을 따로 기입하여 소수가 아닌 정수 0으로 이루어진 2X3 배열이 만들어졌다.

np.ones()

모든 요소가 1인 배열을 만든다.

#모든 요소가 1인 4X5 배열 만들기
a=np.ones((4,5),dtype=int)
print(a)
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]

dtype=int로 설정해서 모든 요소가 정수 1인 4X5 배열이 만들어졌다.

np.full()

모든 요소가 n인 배열을 만든다.

a=np.full((4,3),11)
print(a)
[[11 11 11]
 [11 11 11]
 [11 11 11]
 [11 11 11]]

두 가지 parameter가 들어간다. np.full(shape, n 값)

모든 요소가 11인 4X3 배열이 만들어졌다.

n 값을 11로 했기 때문에 dtype은 int로 만들어졌지만 11.4 처럼 소수로 하면 dtype은 float로 만들어진다.

shape이 무엇인지는 간단하게 밑에 정리하겠다.

np.eye()

nXn 배열을 만든다. (n order square matrix, 정방 행렬이라고도 함)

a=np.eye(3)
b=np.eye(5)

print(a)
print(b)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

정방 행렬은 행의 개수와 열의 개수가 같은 행렬을 말한다.

대각선이 1인 3차 정방행렬과 5차 정방행렬이 만들어졌다.

Default dtype는 float이다.

 

Array의 차원 및 크기 확인하기

ndarray.ndim : Array의 차원 출력

ndarray.shape : Array의 크기 출력

#Array 차원 및 크기 확인
test=[1,2,3,4]
a=np.array(test)
print(a.ndim)
print(a.shape)
1
(4,)

1차원이면서 크기 4의 배열임을 알 수 있다.

 

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

2차원이면서 2X4 배열임을 알 수 있다.

 

test=[[[1,2,3],
       [5,6,7]],
      [[7,8,9],
       [1,2,3]],
      [[4,5,6],
       [7,8,9]]]
a=np.array(test)
print(a.ndim)
print(a.shape)
3
(3, 2, 3)

3차원 배열이며 shape은 배열 개수, 행 개수, 열 개수 순으로 표시된다.

 

참고 URL

https://wikidocs.net/32829

 

'Python > Numpy' 카테고리의 다른 글

4. ndarray 만드는 몇 가지 방법(arange, reshape)  (2) 2021.08.06
2. nd.array() 함수로 Array(배열) 생성하기  (2) 2021.08.05
1. Numpy 란 ?  (1) 2021.08.04

Array 자료형을 다루는 패키지 Numpy를 사용해 Array 데이터를 생성해보자.

 

일반적으로 Python에서는 Array 자료형은 없다.

 

그 말은 모두 1차원이라는 말인데, 숫자, 문자열, 리스트, 튜플, 딕셔너리 등을 생각해보니 2차원 데이터는 없었던 것 같다.

 

Representation of NumPy ndarray (multidimensional array )

위 그림이 ndarray(multi-dimentional array) 개념을 잘 정리해주는 것 같다.

 

맨 왼쪽 Array는 1차원 배열을 의미한다. 

일반적인 리스트, 튜플, 딕셔너리가 이에 해당되며 이들로 1차원 배열을 만들 수 있다.

또한 배열로 배열을 만드는 것도 가능하다.

 

가운데 Array는 2차원 배열을 의미한다.

여러 개의 리스트, 튜플, 딕셔너리, 배열로 만들 수 있다.

 

오른쪽 Array는 3차원 배열을 의미한다.

2차원 배열을 여러개 묶어 만들 수 있다.

 

개념상 4차원 배열을 만들 수 있는 것 같긴 한데, 이해하기도 힘들고 시각화도 어려우니 3차원 배열까지 만들어보면서 Numpy 사용법을 연습해보자.

 

먼저 numpy를 쓰기 위해 import 한다.

import numpy as np

 

1차원 배열 만들기

np.array() 함수를 사용해 리스트, 튜플, 딕셔너리, 배열로 만들 수 있다.

#1차원 배열 만들기
a=np.array([1,2,3,4,5]) #리스트
b=np.array((1,2,3,4,5)) #튜플
c=np.array({"first":1,"second":2,"third":3}) #딕셔너리
d=np.array(a) #배열

print(a)
print(b)
print(c)
print(d)
[1 2 3 4 5]
[1 2 3 4 5]
{'first': 1, 'second': 2, 'third': 3}
[1 2 3 4 5]

일반적인 리스트와 딕셔너리 형태로 보이지만 튜플로 만든 배열도 리스트로 보이고 배열로 만든 배열도 리스트처럼 보인다.

 

각 객체의 데이터 타입을 확인해보자

print(type(a))
print(type(b))
print(type(c))
print(type(d))
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

모두 numpy.ndarray 임을 확인할 수 있다.

 

2차원 배열 만들기

2차원 배열도 리스트, 튜플, 딕셔너리, 배열로 만들 수 있다.간단하게 리스트로 예시를 만들어보자.

 

#2차원 배열 만들기

a=np.array([[1,2,3,4],
            [5,6,7,8]]) #리스트 두 개를 리스트로 묶기
b=np.array(([1,2,3,4],
            [5,6,7,8])) #리스트 두 개를 튜플로 묶기
c=np.array([[1,2,3,4],
            (5,6,7,8)]) #리스트와 튜플을 리스트로 묶기

print(a)
print(b)
print(c)
[[1 2 3 4]
 [5 6 7 8]]
[[1 2 3 4]
 [5 6 7 8]]
[[1 2 3 4]
 [5 6 7 8]]

리스트로 2차원 배열을 만드는 방법은 리스트 두 개를 리스트로 감싸주면 된다.리스트를 튜플로 감싸거나(b) 리스트와 튜플을 리스트로 감싸는 것도 가능한지(c) 확인해봤는데, 모두 똑같은 배열이 생성되는 것을 알 수 있다.

 

즉, 배열을 만들때 사용되는 자료형은 배열이 만들어질 땐 크게 중요하지 않다는 점이다.

 

3차원 배열 만들기

두 개 이상의 배열로 만들 수 있다.

 

3차원 배열 만들기
test=[[[1,2,3],[4,5,6]],
     [[7,8,9],[10,11,12]]]
a=np.array(test)
print(a)
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

test 객체에 리스트(1차원) 두 개를 묶은(2차원) 리스트 2개를 묶은(3차원) 리스트를 할당했다.배열 두 개가 묶인 3차원 배열을 확인할 수 있다.

 

이런 식으로 묶고 묶고 묶고 하다보면 N 차원도 가능할 것이다.

 

실무에선 어떻게 적용될지는 잘 모르겠다.

 

이번 글로 Array의 기본 개념을 정리하고 np.array() 함수를 사용해 1,2,3차 배열을 만들어 보면서 배열이 만들어지는 기본적인 원리를 알아보았다.

 

다음은 ndarray를 다루는 방법들에 대해 알아볼 것이다.

 

참고 URL

https://wikidocs.net/32829

https://indianaiproduction.com/python-numpy-array/

Numpy가 배열 자료형을 다루는데 특화된 패키지라는 것은 알고 있었는데, 정확하게 이해하고 사용해 본 경험이 없어 이번에 개념을 정리해보려고 한다.

 

Num(erical) + Py(thon) = Numpy

Numpy의 주요 특징 3 가지 (위키독스 참고)

1. 넘파이(Numpy)는 이름에서 알 수 있듯이 수치 데이터를 다루는 파이썬 패키지다.

2. Numpy의 핵심이라고 불리는 다차원 행렬 자료구조인 ndarray를 통해 벡터 및 행렬을 사용하는 선형 대수 계산에서 주로 사용된다. (ndarray의 nd가 N dimension을 의미하는 것 같다.)

3. Numpy는 편의성뿐만 아니라, 속도면에서도 순수 파이썬에 비해 압도적으로 빠르다는 장점이 있다.

(왜 빠를까? 이 부분은 다음에 알아봐야겠다.)

 

넘파이는 파이썬 패키지 설치 명령어를 사용해 설치가 가능하다.

pip install numpy

 

관례적으로 numpy는 np로 import 한다. (pandas는 pd, matplotlib은 plt 등등)

import numpy as np

 

import한 패키지 객체.__version__을 하면 패키지 버전을 확인할 수 있다.

np.__version__
'1.21.0'

내가 설치한 numpy는 1.21.0 버전이다.

 

이렇게 numpy를 사용할 준비가 되었다.

 

참고 URL

https://wikidocs.net/32829

https://chancoding.tistory.com/10

+ Recent posts