안녕하세요. 지난 포스팅의 넘파이 알고 쓰자 - Bit packing & output formatting에서는 마지막으로 몇 가지 남은 비트 연산에 대해서 알아보았습니다. 오늘은 넘파이에서도 문자열 연산을 할 수 있다는 것을 보여드리도록 하겠습니다. 다만, 넘파이에서는 문자열을 위한 함수를 굉장히 많이 지원하고 있기 때문에 조금씩 설명을 드리도록 하겠습니다. 오늘 설명드릴 함수들 중 몇 가지는 파이썬에서 기본적으로 제공하는 함수들이 있습니다. 이 함수들과 비교하면서 공부하시면 쉽게 이해하실 수 있습니다.
1. numpy.char.add(x1, x2)
이 함수는 기존 파이썬의 문자열끼리 더하는 + 연산과 완전히 동일한 함수입니다. 아래의 예제를 보면 쉽게 이해하실겁니다. 심지어 인수도 두 개의 문자열만을 받는 것을 볼 수 있습니다. 딱히, axis에 대한 고려를 할 필요가 없다는 이야기가 되겠죠.
a = "string "
b = "numpy"
np.char.add(a, b) # array('string numpy', dtype='<U12')
2. numpy.char.multiply(a, i)
이 함수는 기존 파이썬에서 문자열을 여러번 쓰는 * 연산과 완전히 동일한 함수입니다. 아래의 예제를 보도록 하겠습니다.
np.char.multiply(a, 10)
# array('string string string string string string string string string string ',
# dtype='<U70')
오직 다른 점은 이 함수의 경우에는 넘파이 객체로 나온다는 점입니다.
3. numpy.char.capitalize(a)
이 함수는 파이썬에서 제공하는 str.capitalize와 동일한 함수입니다. 이 함수 역시 아주 간단합니다. 문자열이 입력되면 가장 앞의 문자를 대문자로 바꾼 결과를 반환하는 함수입니다.
a = "string "
b = "numpy"
np.char.capitalize(np.array([a, b]))
# array(['String ', 'Numpy'],dtype='<U7')
4. numpy.char.center(a, width, fillchar=' ')
이 함수는 파이썬에서 제공하는 str.center와 동일한 함수입니다. 이 함수는 이전 함수보다 아주 조금 어렵습니다. 먼저, 인자로는 넘파이 배열, 그리고 width가 들어갑니다. width는 출력 문자열의 길이를 의미합니다. 이 함수는 width에 해당하는 길이만큼 문자열을 출력하게 되는 데 만약, 문자열의 길이보다 width가 작다면 원본 문자열이 잘려서 출력되고 문자열의 길이보다 width가 크다면 문자열이 출력 문자열의 가운데(center)에 있게 만드는 함수입니다. 이 과정에서 문자열의 양 옆에 공백이 생기게 되는 데 이는 fillchar 인자를 이용해서 선택할 수 있습니다.
a = "string "
b = "numpy"
np.char.center(np.array([a, b]), width=5)
# array(['strin', 'numpy'], dtype='<U5')
np.char.center(np.array([a, b]), width=6)
# array(['string', 'numpy '], dtype='<U6')
np.char.center(np.array([a, b]), width=10)
# array([' string ', ' numpy '], dtype='<U10')
np.char.center(np.array([a, b]), width=10, fillchar='z')
# array(['zstring zz', 'zznumpyzzz'], dtype='<U10')
5. numpy.char.expandtabs(a, tabsize=8)
이 함수는 파이썬에서 제공하는 str.expandtabs와 동일한 함수입니다. 이 함수는 문자열에 포함된 tab('\t')를 한 개 이상의 공백으로 변환시킵니다. 이를 tabsize로 조절하게 됩니다. default로는 tabsize가 8이기 때문에 1개의 tab은 8개의 공백으로 자동으로 변환시켜줍니다.
a = "string \t hello"
b = "numpy \t"
np.char.expandtabs(np.array([a, b]), tabsize=1000)
# array(['string
# 'hello',
# 'numpy '],
# dtype='<U1006')
6. numpy.char.lower(a) & numpy.char.upper(a)
이 함수는 파이썬에서 제공하는 str.lower, str.upper와 동일한 함수입니다. 이 함수는 문자열이 들어오면 전부 알파벳의 소문자, 대문자로 변환하는 함수입니다.
a = "string "
b = "numpy"
c = "STRING"
d = "NUMPY"
np.char.upper(np.array([a, b]))
#array(['STRING ', 'NUMPY'], dtype='<U7')
np.char.lower(np.array([c, d]))
# array(['string', 'numpy'], dtype='<U6')
7. numpy.char.zfill(a, width)
이 함수는 파이썬에서 제공하는 str.zfill와 동일한 함수입니다. 이 함수는 문자열이 들어오면 왼쪽으로 "0"인 문자열로 채우는 함수입니다. width는 결과 문자열의 길이를 의미합니다
a = "string "
b = "numpy"
c = "1"
np.char.zfill(np.array([a, b, c]), 10)
# array(['000string ', '00000numpy', '0000000001'], dtype='<U10')
위의 몇 가지 함수를 보시면 아시겠지만 대부분 기존의 파이썬에서 제공하는 기능을 vectorization을 위해 확장한 것입니다. 기존의 파이썬에서의 문자열 연산은 한번에 한개씩밖에 처리하지 못했지만 넘파이 라이브러리를 이용하면 고용량의 문자열 데이터를 일률적으로 정제할 때 굉장히 빠르게 처리할 수 있을 것입니다.
'Programming > Python' 카테고리의 다른 글
넘파이 알고 쓰자 - 문자열 비교 (0) | 2020.10.10 |
---|---|
넘파이 알고 쓰자 - 문자열 연산 2 (0) | 2020.10.04 |
넘파이 알고 쓰자 - Bit packing & output formatting (0) | 2020.09.13 |
넘파이 알고 쓰자 - Elementwise bit operations (0) | 2020.09.08 |
넘파이 알고 쓰자 - 넘파이 원소 재배열하기 (0) | 2020.09.03 |