Câu trả lời:
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 list
trên map
giá trị trả về nếu bạn sử dụng map
, vì map
lợ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)
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.
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)
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'>
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.