Làm thế nào để chuyển đổi một mảng chuỗi thành một mảng float trong numpy?


116

Làm thế nào để chuyển đổi

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

đến

[1.1, 2.2, 3.2]

trong NumPy?

Câu trả lời:


179

Chà, nếu bạn đang đọc dữ liệu dưới dạng danh sách, chỉ cần làm np.array(map(float, list_of_strings))(hoặc tương đương, sử dụng khả năng hiểu danh sách). (Trong Python 3, bạn sẽ cần phải gọi listtrên mapgiá trị trả về nếu bạn sử dụng map, vì maplợi nhuận một iterator bây giờ.)

Tuy nhiên, nếu nó đã là một mảng chuỗi phức tạp, có một cách tốt hơn. Sử dụng astype().

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

và nếu bạn có một mảng với một chuỗi mà tôi muốn duy trì? như ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - Sau đó sử dụng a list. Các mảng lộn xộn được đánh đồng nhất một cách có chủ ý. Nếu bạn thực sự muốn, bạn có thể sử dụng một mảng đối tượng (ví dụ np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Tuy nhiên, mảng đối tượng không có bất kỳ lợi thế đáng kể nào so với việc sử dụng danh sách.
Joe Kington

4

Bạn cũng có thể sử dụng cái này

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

3

Một tùy chọn khác có thể là numpy.asarray :

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

Đối với Python 2 *:

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

dẫn đến:

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

1
Tôi đã chuẩn tất cả các câu trả lời ở đây trong python 2.7. Giả sử tôi được cung cấp một danh sách gồm 512 chuỗi biểu thị số dấu phẩy động, thì cách tiếp cận này là nhanh nhất (nhanh hơn một chút so với câu trả lời của pradeep bisht, nhanh hơn khoảng 1,5 lần so với câu trả lời của Thomio và nhanh hơn hai lần so với câu trả lời được chấp nhận). Có một ủng hộ!
jodag

2

Nếu bạn có (hoặc tạo) một chuỗi đơn, bạn có thể sử dụng np.fromstring :

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

Lưu ý, x = ','.join(x)biến đổi mảng x thành chuỗi '1.1, 2.2, 3.2'. Nếu bạn đọc một dòng từ tệp txt, mỗi dòng sẽ là một chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.