문자열 배열을 numpy의 부동 소수점 배열로 변환하는 방법은 무엇입니까?


116

변환 방법

["1.1", "2.2", "3.2"]

[1.1, 2.2, 3.2]

NumPy에서?

답변:


179

글쎄, 당신이 목록으로 데이터를 읽는다면, 그냥하십시오 np.array(map(float, list_of_strings))(또는 동등하게 목록 이해력을 사용하십시오). (Python 3에서는 이제 반복자를 반환 하므로 를 사용 list하면 map반환 값 을 호출해야합니다 .)mapmap

그러나 이미 많은 문자열 배열 인 경우 더 나은 방법이 있습니다. 사용 astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)

유지하고 싶은 문자열이있는 배열이 있다면? like [ 'a', '1.1', '2.2', '3.3']-> [ 'a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin-그런 다음 list. Numpy 배열은 의도적으로 균일하게 형식화됩니다. 정말로 원한다면 객체 배열 (예 :)을 사용할 수 있습니다 np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object). 그러나 객체 배열은 목록을 사용하는 것보다 큰 이점이 없습니다.
Joe Kington 2015 년

4

이것도 사용할 수 있습니다

import numpy as np
x=np.array(['1.1', '2.2', '3.3'])
x=np.asfarray(x,float)

3

다른 옵션은 numpy.asarray 일 수 있습니다 .

import numpy as np
a = ["1.1", "2.2", "3.2"]
b = np.asarray(a, dtype=np.float64, order='C')

Python 2 *의 경우 :

print a, type(a), type(a[0])
print b, type(b), type(b[0])

를 야기하는:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>

1
나는 파이썬 2.7에서 모든 답변을 벤치마킹했습니다. 부동 소수점 숫자를 나타내는 512 개의 문자열 목록이 있다고 가정하면이 접근 방식이 가장 빠릅니다 (pradeep bisht의 답변보다 약간 빠르며 Thomio의 답변보다 약 1.5 배 빠르며 허용 된 답변보다 두 배 이상 빠름). 찬성하세요!
jodag aug

2

단일 문자열이 있거나 생성 한 경우 np.fromstring 사용할 수 있습니다 .

import numpy as np
x = ["1.1", "2.2", "3.2"]
x = ','.join(x)
x = np.fromstring( x, dtype=np.float, sep=',' )

참고 x = ','.join(x)문자열을 X 배열 변환 '1.1, 2.2, 3.2'. txt 파일에서 한 줄을 읽으면 각 줄은 이미 문자열입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.