2012-01-08 4 views
2

숫자와 문자열을 같은 numpy 배열에 넣고 싶습니다. 그러나 매우 드물게 (복제하기는 어렵지만 때로는) 수치 변환에서 십진수로 역 변환 할 수없는 값을 반환하는 오류가 발생합니다 (예 : 9.8267567e, 9.8267567 e-5 "). 이것은 파일을 작성한 후에 문제를 일으키는 것입니다. 이 100 개 문자열의 문자를 허용해야한다는파이썬에서 숫자 자릿수 제한하기

import numpy as np 
x = np.array(.94749128494582) 
y = np.array(x, dtype='|S100') 

나의 이해는하지만, 가끔은 차단 후 10 ~보고 있어요 : 여기 (하지만 훨씬 작은 규모) 뭐하는 거지의 예입니다. 할당해야하는 또 다른 유형이 있습니까, 아니면 배열 (x)의 문자 수를 제한 할 수 있습니까?

+0

왜 문자열 배열을 사용하고 있습니까? 또한 문자열과 부동을 같은 배열에 넣고 싶다면'numpy'는 원하는 것이 아닙니다. 객체 배열을 사용하여 수행 할 수 있지만 numpy 전체 지점 인 메모리 효율성을 느슨하게합니다 ... 왜 목록을 사용하지 않는 것입니까? –

답변

1

우선 x = np.array(.94749128494582)np.array에 전달 된 인수가 배열 인터페이스에서 어떤 종류의 것이어야하기 때문에 생각한대로 수행하지 않을 수 있습니다. 아마도 x = np.array([.94749128494582])을 의미할까요? 조 그의 주석에서 언급 한 것처럼

이제 제대로 문자열을 보존, 당신은 매우 numpythonic 아니다, 그러나

y = np.array(x, dtype=object) 

를 사용하여이 문제를 해결 수 있고, 당신은뿐만 아니라 평범한 구식 파이썬을 사용하고있을 수 있습니다 기울기.

문자열과 숫자를 같은 배열에 보관해야하는 이유가 무엇인지 신중하게 검토하는 것이 좋습니다. 부적절한 데이터 구조를 설정하고 재 설계/리팩토링에서 이익을 얻을 수있는 것처럼 내게 냄새를 풍깁니다. numpy 어레이는 빠른 수치 연산을위한 배열이므로 문자열 조작이나 일종의 저장 장치/데이터베이스로 사용하기에는 적합하지 않습니다.

관련 문제