Hãy tưởng tượng bạn có một chuỗi rất dài. cách hiệu quả nhất của việc tìm kiếm các khoảng là gì nơi dãy là tất cả các số không (hay chính xác hơn chuỗi giảm xuống giá trị gần như zero abs(X)<eps
):Tìm các đảo số 0 theo thứ tự
Để đơn giản, cho phép giả định trình tự sau đây:
sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0];
tôi đang cố gắng để có được các thông tin sau:
startIndex EndIndex Duration
3 6 4
12 12 1
14 16 3
25 26 2
30 30 1
sau đó sử dụng thông tin này, chúng tôi tìm thấy những khoảng thời gian với thời gian> = một số giá trị nào đó (chẳng hạn 3
), và trả lại chỉ số của các giá trị trong tất cả những khoảng thời gian kết hợp:
indices = [3 4 5 6 14 15 16];
Đó phần cuối cùng liên quan đến một câu hỏi trước:
MATLAB: vectorized array creation from a list of start/end indices
Đây là những gì tôi có cho đến nay:
sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0];
len = length(sig);
thresh = 3;
%# align the signal with itself successively shifted by one
%# v will thus contain 1 in the starting locations of the zero interval
v = true(1,len-thresh+1);
for i=1:thresh
v = v & (sig(i:len-thresh+i) == 0);
end
%# extend the 1's till the end of the intervals
for i=1:thresh-1
v(find(v)+1) = true;
end
%# get the final indices
v = find(v);
Tôi đang tìm cách để vector hóa/tối ưu hóa mã, nhưng tôi đang mở để soluti khác . Tôi phải nhấn mạnh rằng không gian và thời gian hiệu quả là rất quan trọng, vì tôi đang xử lý một số lượng lớn các tín hiệu sinh học dài.
Tôi thích cách bạn sử dụng các đảo từ. – ChaosPandion
@ChaosPandion: tìm kiếm các đảo số 0 trong biển… arrr :) – merv