Tôi đang thực hiện một vòng lặp lồng nhau trong python được bao gồm bên dưới. Đây là cách tìm kiếm cơ bản thông qua chuỗi thời gian tài chính hiện tại và tìm kiếm các khoảng thời gian trong chuỗi thời gian phù hợp với các đặc điểm nhất định. Trong trường hợp này, có hai mảng riêng biệt, có kích thước bằng nhau, đại diện cho 'đóng' (nghĩa là giá của một nội dung) và 'khối lượng' (nghĩa là số tiền của tài sản được trao đổi trong khoảng thời gian này). Đối với mỗi khoảng thời gian, tôi muốn nhìn về phía trước ở tất cả các khoảng thời gian trong tương lai với độ dài từ 1 đến INTERVAL_LENGTH và xem có bất kỳ khoảng thời gian nào có đặc điểm phù hợp với tìm kiếm của tôi hay không (trong trường hợp này tỷ lệ của giá trị đóng lớn hơn 1,0001 và ít hơn hơn 1,5 và khối lượng tổng hợp lớn hơn 100).Làm thế nào để tăng tốc vòng lặp lồng nhau python?
Sự hiểu biết của tôi là một trong những lý do chính cho việc tăng tốc khi sử dụng NumPy là trình thông dịch không cần phải gõ-kiểm tra các toán hạng mỗi khi nó đánh giá một cái gì đó miễn là bạn đang hoạt động trên mảng toàn bộ (ví dụ numpy_array * 2), nhưng rõ ràng là đoạn code dưới đây không lợi dụng điều đó. Có cách nào để thay thế các vòng lặp nội bộ với một số loại chức năng cửa sổ mà có thể dẫn đến một tăng tốc, hoặc bất kỳ cách nào khác bằng cách sử dụng numpy/scipy để tăng tốc độ này lên đáng kể trong python bản địa?
Ngoài ra, có cách nào tốt hơn để làm điều này nói chung (ví dụ: sẽ nhanh hơn khi viết vòng lặp này trong C++ và sử dụng dệt)?
ARRAY_LENGTH = 500000
INTERVAL_LENGTH = 15
close = np.array(xrange(ARRAY_LENGTH))
volume = np.array(xrange(ARRAY_LENGTH))
close, volume = close.astype('float64'), volume.astype('float64')
results = []
for i in xrange(len(close) - INTERVAL_LENGTH):
for j in xrange(i+1, i+INTERVAL_LENGTH):
ret = close[j]/close[i]
vol = sum(volume[i+1:j+1])
if ret > 1.0001 and ret < 1.5 and vol > 100:
results.append([i, j, ret, vol])
print results
Tính toán của bạn trông rất đơn giản, tại sao bạn không sử dụng Cython? – Tarantula