Với hai mảng chiều dài bằng nhau, một dữ liệu tổ chức, một tổ chức kết quả nhưng ban đầu thiết lập để không, ví dụ:Python/NumPy: thực hiện một khoản tiền chạy (nhưng không hoàn toàn)
a = numpy.array([1, 0, 0, 1, 0, 1, 0, 0, 1, 1])
b = numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Tôi muốn như để tính toán tổng của tất cả các tập con có thể có của ba phần tử liền kề trong a. Nếu tổng là 0 hoặc 1, ba phần tử tương ứng trong b sẽ không thay đổi; chỉ nếu tổng vượt quá 1 là ba phần tử tương ứng trong b thiết lập để 1, do đó sau khi tính toán b trở nên
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
Một vòng lặp đơn giản sẽ thực hiện điều này:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
Sau này, b có biểu mẫu mong muốn.
Tôi phải làm điều này cho một lượng lớn dữ liệu, vì vậy tốc độ là một vấn đề. Có cách nào nhanh hơn trong NumPy để thực hiện thao tác trên không?
(Tôi hiểu điều này tương tự như một sự giải thể, nhưng không hoàn toàn giống nhau).
Chính xác những gì tôi định đề xuất, nhưng nhanh hơn 30 giây. ;) –
Trên 'a' của OP, điều này thực sự chậm hơn, nhưng khi mảng phát triển nó dường như tốt hơn nhiều. –
+1: Các tính năng của NumPy được sử dụng rất tốt ở đây. Mã thanh lịch và hiệu quả. – EOL