opencv 를 사용하다보면 넘파이를 사용해야 한다.

 

이미지 파일을 넘파이 객체로 만들어 주기 때문에 넘파이을 사용해야 한다.

 

파이썬의 기본 자료형에 리스트가 있긴 하지만 이런 이미지나 그래픽 처리에 적합한 형식이라기 보다는 범용적인 자료형에 가깝다. 좀더 숫자 연산에 특화되어 있는 모듈이 Numpy 이다. 그래서 이름도 Number + Python 의 약자이다.

 

우선 설치는 항상 같다. 윈도우10이라면 numpy를 사용할 때 쯤 되었다면 pip 명령어가 익숙할 것이다.

pip install numpy

 

첫번째로는 리스트 자료형을 넘파이 객체로 변환해보자.

 

변환한 다음 넘파이 객체의 각종 속성들을 확인한다. 새로운 클래스의 사용법을 배우는데는 안에 있는 속성을 가져와서 들여다 보는 것이다. 그게 무슨 의미인지 전부 다는 몰라도 된다. 어떤 속성들을 가진 클래스인지 짐작할 수 있게 해준다.

import numpy

list1 = [1, 2, 3, 4, 5, 6, 7]
print(type(list1))

array = numpy.array(list1)
print(type(array))
print('size:', array.size)
print('data type:', array.dtype)
print('shape:', array.shape)
print('data: ', array.data)
print('ctype: ', array.ctypes)
print('item size: ', array.itemsize)
print('array: ', array)

리스트에서 numpy.array로 변환을 시켰다. 

 

아래의 결과창에서 확인하면 numpy.ndarray 클래스로 변환되었다. 그전에는 물론 list 클래스 였다.

클래스를 바꾼 후에 다른 속성들이 생겼다. 하나씩 꺼내본다. size, date type(기본형 데이터) 메모리 위치 부터 array에 저장된 모습까지 볼 수 있다. 속성을 모두 이해할 필요는 없다. 차츰 알게 될 것이다.


*이번에는 numpy 에서 직접 생성해보자. 메서드를 사용하면 된다.

array2 = numpy.arange(10)
print(array2)

list 를 거칠 필요가 없으니 수월하다. 0부터 9까지의 숫자를 생성한다.

 

 

*이것은 행렬을 만드는 메서드다. 데이터 타입을 설정해줄 수 있는 것이 보인다.

array3 = numpy.zeros((5, 5), dtype=int)
print(array3)

array4 = numpy.ones((3, 3), dtype=str)
print(array4)

zeros 메서드는 초기값 0으로 생성한다. (5,5) 튜플은 곳 5x5 행렬이다.

 

두번째 ones는 초기값 1로 생성한다. 데이타 타입이 str 인데 문자열이다. 역시 튜플에다가 3x3이라 명시해놨다.

 

 

*특정 숫자로 초기화는 full 메서드다. 초기화를 위해 인자 5를 추가로 전달한다.

import numpy

array = numpy.full((4,4),5)
print(array)

 

* 다음은 랜덤으로 행열을 생성한다.

1에서부터 6까지 4x4 행렬을 생성한다. 1부터 6까지란 것은 주사위의 숫자와 같다.

array5 = numpy.random.randint(1,7, (4,4))
print(array5)

* 배열에 접근하려면 배열 인덱스를 사용한다. 아래 코드는 랜덤으로 4x4배열을 생성하여 저장한 후 개별의 값에 접근한다.

import numpy

array = numpy.random.randint(1,7, (4,4))

print(array)
print()

for i, v in enumerate(array):

    print('-'*15)
    print(f'{i}행: {v}')
    print('-'*15,'\n')
    for j, k in enumerate(array[i]):
        print(f'({i},{j})', array[i][j])
    print()

 

 

*다음은 정규분포 데이터를 만드는 방법이다. 인자에 100은 평균, 30은 표준편차인 데이터로 3x3 의 데이터를 만든다.

array6 = numpy.random.normal(100,30, (3, 3))
print(array6)

 

Numpy를 생성하는 다른 방법도 많이 있겠지만 그것은 실질적인 데이터를 사용하면서 알아가면 된다.

 

너무 튜토리얼만 많이 하면 프로그래밍이 빠르게 늘지 않는다.

 

Numpy객체의 생성에 대한 방법은 이정도로 하고 다음 포스팅에서는 데이터의 조작에 대하여 다루도록 한다.

공유하기

facebook twitter kakaoTalk kakaostory naver band