아이공의 AI 공부 도전기

numpy zeros, zeros_like 알아보기


우리는 간혹 0으로 가득찬 array를 만들고 싶을 때가 있습니다. 때로는 0으로 가득찬 array 중에서도 어떤 array의 shape 모양을 가진 상태로 복사하고 싶을 때 또한 있습니다. 

물론 array의 숫자가 적다면 손수 적으면 되지만 우리는 어렵지 않고 손쉽게 만들 수 있는 방법을 통해 해결해보려고 합니다.


그것은 바로 np.~ 그리고 np.~_like series 입니다. 


아래 내용에 대해서도 찾고 싶다면 옆 링크를 확인하세요.(보완 중)


numpy.ones 

numpy.ones_like

numpy.empty

numpy.empty_like

numpy.full

numpy.full_like


그 중에서도 오늘 살펴볼 내용은 numpy.zeros, numpy.zeros_like입니다.


zeros는 말 그대로 zero들로 가득찬 array를 만들겠다라고 해서 이름이 붙여진 것으로 생각되고 zeros_like어떤 특정 array와 같은(like) 사이즈,크기(shape)의 zeros array를 구하고자하여 붙여진 이름으로 생각됩니다.


아래 공식 홈페이지 documents를 보며 이야기를 더 나눠봅시다.


1. numpy.zeros

https://numpy.org/doc/stable/reference/generated/numpy.zeros.htmlhttps://numpy.org/doc/stable/reference/generated/numpy.zeros.html


우선 zeros는 설명에 담긴 것처럼 주어진 shape나 type에 맞춰 0으로 가득찬 새로운 array를 반환하는 함수입니다.


이 때 필요로 하는 parameter는 shape가 유일합니다.

option으로 dtype이나 order에 대해서 변경이 가능합니다.


1) shape : 새로운 array의 규격, 크기를 넣는 부분으로 이 사이즈에 맞게 array가 형성됩니다.

아래의 예를 살펴보면 shape에는 int 또는 튜플 형태에 int가 여러개 있어도 된다는 사실을 확인할 수 있습니다.


2) dtype : zero라고 하여 그 숫자가 꼭 float일 필요가 없습니다. 이 0은 정수일 수도 있고 실수일 수도 있다는 점이고 이 부분의 dtype은 후에 나누기를 사용할 때 올림이나 내림을 사용할 때 유용하게 쓰일 수 있는 parameter입니다.

default는 float(실수)로 설정되어 있으며 optional하기에 굳이 선택하지 않아도 됩니다.


3) order : 메모리에 저장할 때 다차원의 데이터 순서에 대한 방식을 논하는 parameter로 겉보기에는 차이가 없어보입니다. 'C' 또는 'F' 만을 넣을 수 있는 optional parameter로 'C'는 row-major(C-style), 'F'는 column-major(Fortran-style)을 의미합니다. default는 C type을 가르키는 'C'



참고로 맨 아래의 예시는 dtype을 custom으로 맞출 수 있다는 예시였습니다.

여기서 사용한 'i4'는 Type Code를 의미하는 것으로 int32와 동일한 의미입니다. 이 부분에 대해서는 추후 다루도록 하겠습니다.



2. numpy.zeros_like

https://numpy.org/doc/stable/reference/generated/numpy.zeros_like.htmlhttps://numpy.org/doc/stable/reference/generated/numpy.zeros_like.html


앞의 numpy.zeros에 대해서 이해를 하셨다면 여기서는 훨씬 더 수월하게 이해하실 수 있을 것입니다. 여기서 반드시 필요한 부분은 a이고 나머지는 optional parameter이므로 참조하시면서 자세히 살펴봅시다.


1) a : array_like

이 부분은 닮고 싶은 크기의 array 혹은 그와 비슷한 형태(np.mat:matrix)를 넣는 것입니다.

아래의 예시에서 저는 a라는 array를 만들었고 parameter에 바로 넣음으로써 우리는 a의 크기이되 0으로 가득찬 array가 생성됨을 확인할 수 있습니다.


2) dtype : data-type, optional

변환하고싶은 type을 적는 parameter로 앞에서 zeros에서 설명한 것과 동일합니다. 

3) order : {'C','F','A','K'}, optional

zeros와 동일합니다. memory에 저장하는 순서에 대한 이야기를 하는 부분입니다. 단순히 사용하는 저희에게는 그렇게 필요한 parameter는 아니라고 판단됩니다. 


4) subok : bool, optional, default=True

True라면 새로 생성되는 array를 parameter 1) 'a'의 sub-class type으로 사용하고자 할 때를 의미하며 False의 경우는 base-class 즉 array의 형태로 사용할지에 대해 설정하는 부분입니다.


사실 이 부분은 말보다 직접해보는 것이 더 이해하기 쉽습니다.

아래를 살펴보시면 matrix를 만드는 함수인 np.mat를 통해 'a' parameter에 넣었는데 결과값으로 matrix가 반환되는 것을 확인할 수 있습니다.



그런데 만약 subok=False인 상태에서 결과는 무엇으로 반환되는지 바로 위 예를 살펴보면 array를 반환하는 것을 확인할 수 있습니다.


subok이 True라면 'a'에 넣었던 형태와 같은 class를 반환하고

False라면 base인 array를 반환하는 것입니다.


5) shape : int or sequence of ints, optional


zeros_like는 'a'의 모양을 따라 크기를 설정하여 그 안에 0를 넣는 것입니다. 그러나 때로는 shape를 설정함으로써 크기를 규정하기를 바랄 경우가 있습니다.

물론 차라리 이렇게 할 바에 zeros를 사용하자라고 말씀하실 수도 있다고 생각되는데 저 역시 동의합니다.

그러나 코딩을 하다보면 때로는 필요했으면 하는 함수가 절실할 때가 있는데 이 경우도 그럴 수 있다고 생각하기에 이런 parameter도 있다라는 정도로 넘어가면 좋을 것 같습니다.


int를 넣을 수도 있고, 튜플 형태의 int들을 넣을 수도 있는 조건을 인지합시다.


공유하기

facebook twitter kakaoTalk kakaostory naver band
loading