반응형
임의 길이 문자열의 numpy 배열을 만드는 방법은 무엇입니까?
저는 파이썬에 대한 완전한 신인이지만 주어진 문자열이 (효과적으로) 임의의 길이가 될 수있는 것 같습니다. 즉, a를 가져 와서 string str
계속 추가 할 수 있습니다 str += "some stuff..."
.. 그러한 문자열의 배열을 만드는 방법이 있습니까?
이것을 시도하면 각 요소는 단일 문자 만 저장합니다.
strArr = numpy.empty(10, dtype='string')
for i in range(0,10)
strArr[i] = "test"
반면에 특정 길이 문자열의 배열을 초기화 할 수 있다는 것을 알고 있습니다.
strArr = numpy.empty(10, dtype='s256')
최대 256 자의 문자열 10 개를 저장할 수 있습니다.
배열을 생성하여 그렇게 할 수 있습니다 dtype=object
. 긴 문자열을 일반 numpy 배열에 할당하려고하면 문자열이 잘립니다.
>>> a = numpy.array(['apples', 'foobar', 'cowboy'])
>>> a[2] = 'bananas'
>>> a
array(['apples', 'foobar', 'banana'],
dtype='|S6')
그러나를 사용 dtype=object
하면 파이썬 객체 참조 배열을 얻습니다. 따라서 파이썬 문자열의 모든 동작을 가질 수 있습니다.
>>> a = numpy.array(['apples', 'foobar', 'cowboy'], dtype=object)
>>> a
array([apples, foobar, cowboy], dtype=object)
>>> a[2] = 'bananas'
>>> a
array([apples, foobar, bananas], dtype=object)
실제로 객체의 배열이기 때문에 모든 종류의 파이썬 객체를 배열에 할당 할 수 있습니다 .
>>> a[2] = {1:2, 3:4}
>>> a
array([apples, foobar, {1: 2, 3: 4}], dtype=object)
그러나 이것은 numpy 사용의 많은 이점을 취소합니다. numpy는 원시 메모리의 큰 연속 블록에서 작동하기 때문에 매우 빠릅니다. 파이썬 객체로 작업하면 많은 오버 헤드가 추가됩니다. 간단한 예 :
>>> a = numpy.array(['abba' for _ in range(10000)])
>>> b = numpy.array(['abba' for _ in range(10000)], dtype=object)
>>> %timeit a.copy()
100000 loops, best of 3: 2.51 us per loop
>>> %timeit b.copy()
10000 loops, best of 3: 48.4 us per loop
개체 데이터 유형을 사용할 수 있습니다.
>>> import numpy
>>> s = numpy.array(['a', 'b', 'dude'], dtype='object')
>>> s[0] += 'bcdef'
>>> s
array([abcdef, b, dude], dtype=object)
참조 URL : https://stackoverflow.com/questions/14639496/how-to-create-a-numpy-array-of-arbitrary-length-strings
반응형
'Nice programing' 카테고리의 다른 글
체크인 작업에 대한 자동 완료 상태를 비활성화하는 방법 (0) | 2020.12.29 |
---|---|
업로드하기 전에 이미지의 크기를 확인할 수 있습니까? (0) | 2020.12.29 |
'operator>'에는 const가 필요하지만 'operator <'에는 왜 필요하지 않습니까? (0) | 2020.12.29 |
Android에서 다른 조각으로 이동 한 후 탐색 스택을 지우는 방법 (0) | 2020.12.29 |
통계를 위해 인간 방문자와 구분하여 봇에게 알려주시겠습니까? (0) | 2020.12.28 |