2011-04-15 99 views
15

Tôi nhận được một mảng lớn (hình ảnh với 12 Mpix) trong định dạng mảng từ lib chuẩn python. Vì tôi muốn thực hiện các thao tác trên mảng đó, tôi muốn chuyển đổi nó thành một mảng có nhiều mảng. Tôi đã thử các cách sau:mảng python hiệu quả để chuyển đổi mảng numpy

import numpy 
import array 
from datetime import datetime 
test = array.array('d', [0]*12000000) 
t = datetime.now() 
numpy.array(test) 
print datetime.now() - t 

Tôi nhận được kết quả từ một đến hai giây: tương đương với vòng lặp trong python.

Có cách nào hiệu quả hơn để thực hiện chuyển đổi này không?

+0

Nguồn dữ liệu thực tế của bạn là gì? Liệu nó có phải đi qua các loại mảng? –

+0

Nguồn của tôi là một lib tôi không thể sửa đổi. Tôi không thể thay đổi nó để sử dụng numpy. – Simon

Trả lời

34
np.array(test)          # 1.19s 

np.fromiter(test, dtype=np.int)      # 1.08s 

np.frombuffer(test)         # 459ns !!! 
+0

cảm ơn bạn! Tôi đang nghĩ về thứ gì đó giống như 'kẻ bướng bỉnh'. – Simon

+0

dang, tôi không biết về từbuffer! Cảm ơn! –

+0

Có điều gì khác được tính là 'bộ đệm' không? Tất cả numpy nói là "Một đối tượng cho thấy giao diện bộ đệm." Có bất kỳ downfals để sử dụng này, và nếu không phải lý do tại sao không np.array sử dụng nó trong nội bộ? –

Các vấn đề liên quan