본문 바로가기
Programming/python

[NumPy] ndarray 데이터 처리

by 유주원 2015. 3. 14.

where

NumPy에서는 where을 이용한 조건 결과 찾기가 가능한다. 가령 아래와 같은 배열집합이 있다고 가정하자.


arr1 = np.array([1, 3, 5, 7, 9])

arr2 = np.array([2, 4, 6, 8, 10])

cond = np.array([True, False, True, True, False])


cond의 원소가 True일 때 arr1의 값을 찾고, False일때는 arr2의 값을 찾아야 한다고 하면 아마 아래와 같이 작성할 것이다.


 result = [(x if c else y) 

                  for x, y, c in zip(arr1, arr2, cond)]


where 함수를 사용하면 더 간단하게 작성할 수 있다.


result = numpy.where(cond, arr1, arr2)


where의 중첩 사용도 가능하다.


numpy.where(cond1 & cond2, 0,

                          numpy.where(cond1, 1,

                                                    numpy.where(cond2, 2, 3)))


위 예제를 살펴보면, cond1과 cond2가 참일 때는 0, 그렇지 않을 때는 where 조건.

where 조건에서 cond1이 참일 때는 1, 그렇지 않을 때는 다시 where 조건,

cond2가 참일 때는 2, 그렇지 않을 때는 3을 반환하게 코드가 작성되어 있다.


NumPy에서 중복 제거

배열 내에 중복되는 원소가 있을 경우 아래와 같은 방법을 통해서 중복 제거를 실행할 수 있다.


names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Sam', Joe'])

np.unique(names) 


일반 파이썬에서는 set 함수를 이용하여 중복을 제거할 수 있다.


names = ['Bob', 'Joe', 'Will', Bob', 'Sam', 'Joe']

set(names)


배열을 파일 처리하기

numpy.save, numpy.load 함수를 통해서 배열을 파일로 저장하거나 저장된 파일을 메모리로 불러들일 수가 있다.

save를 통한 파일 저장시 확장자는 .npy가 됨을 유의하자


arr = np.arange(10)

np.save('array', arr)

np.load('array.npy')


savez 함수를 통해서 여러 배열을 압축된 형태로 저장할 수가 있다.


np.savez('multi_array.npz', a=arr1, b=arr2)

temp = np.load('multi_array.npz')

temp['a']