Thuật toán làm mịn đường mà duy trì tính đồng nhất dữ liệu


7

Giới thiệu:

Tôi đang làm việc với tập dữ liệu khổng lồ mà tôi cần vẽ trong trình duyệt và vì có thể có tới 1 triệu điểm, ý tưởng của tôi là tạo ra các biểu diễn khác nhau cho các mức thu phóng khác nhau

giả sử tôi có 100 nghìn điểm, tôi sẽ trung bình hai lần cho đến khi tôi nhận được 50 nghìn điểm, sau đó tôi sẽ lặp lại điều đó cho đến khi tôi đạt được dưới 500 điểm (ngưỡng tùy ý của tôi)

Vì vậy, ở mức thu nhỏ nhất, tôi sẽ vẽ tất cả 500 điểm hoặc một phần của nó, tùy thuộc vào kích thước biểu đồ và khi tôi phóng to, tôi sẽ chuyển sang mức thu phóng tiếp theo (và truyền dữ liệu nếu người dùng kéo lựa chọn l / r ) và cuối cùng nếu người dùng muốn xem chi tiết hạt mịn, anh ta có thể phóng to đến mức thu phóng 0 và xem tất cả các chi tiết tốt.

Tôi thực sự đã tạo ra nguyên mẫu này và nó hoạt động khá tốt, ngoại trừ một điều: tác dụng phụ của điều này là, như bạn có thể tưởng tượng, rằng các đỉnh bị mất trong các lần lặp trung bình.

Tôi đã thực hiện một số nghiên cứu và tìm hiểu về thuật toán Douglas-Peucker và cách nó có thể duy trì các đỉnh, tôi đã thực hiện một số thử nghiệm và nó hoạt động khá tốt, nhưng vấn đề với nó là nếu nó gặp phải một loạt dữ liệu (giá trị y) [1 , 1,1,1,5,6,1,1,1,1,1,1] nó sẽ làm trơn tru điều đó thành một thứ như [1,6,1,1] không phù hợp với tôi vì tôi cần giữ tỷ lệ các mức thu phóng như thế này

n (chiều dài của dữ liệu gốc)> n / 2> n / 4> n / 8> .....

Tôi đã đọc khá nhiều bài viết về làm mịn dòng, nhưng tất cả các thuật toán mà tôi tìm thấy đều chấp nhận ngưỡng khoảng cách, chúng sử dụng để làm mịn như một tham số, và không ai trong số chúng có thể chấp nhận số lượng phần tử đầu ra mong muốn, và vì mục tiêu của chúng là làm mịn dòng, họ sẽ biến đổi chuỗi như thế này (giá trị y) [1,1,1,1,1,1,1,1,1,1,1] thành [1,1]

Vì vậy, cuối cùng, câu hỏi của tôi:

Có một algoritm rằng:

  • thay vì ngưỡng khoảng cách thông thường chấp nhận số lượng phần tử đầu ra mong muốn
  • cố gắng duy trì các đỉnh (như Douglas-Peucker làm)
  • sẽ làm mịn dữ liệu đồng đều, vì vậy ngay cả khi nó nhận được (giá trị y) [1,1,1,1,1,1] và tôi nói rằng tôi muốn 3 kết quả đầu ra, nếu lý thuyết đúng về mặt lý thuyết là trơn tru như [1,1] thay vào đó tôi sẽ cần lấy [1,1,1]

Ngoài ra, xin đừng nhầm lẫn vì thiếu thông tin trục X vì nó không liên quan vì tất cả dữ liệu được đo từ 1 đến n trong các bước của 1, vì vậy không có giá trị N / A, hoặc các điểm trống hoặc giá trị như [1.3 , 1,4,3]

x luôn là [1,2,3 .... n]


Điều này nghe có vẻ giống như một ứng dụng tự tương tự (ví dụ như đã thấy với fractals) trong đó bạn sẽ phải lập trình xác định (các) phương trình và thuật toán thích hợp dựa trên tập dữ liệu đầy đủ hoặc bảo tồn tính năng đơn giản hơn thuật toán chia tỷ lệ hình ảnh ...
Richard Arnold Mead

Chỉ là một sự tò mò: bạn đã thử thuật toán tầm thường (không trung bình, không làm mịn)? Nếu bạn đang ở mức thu nhỏz tức là bạn muốn đại diện cho n điểm gốc chỉ sử dụng m= =n/2zđiểm; sau đó tạo ram các giá trị chỉ chọn tối thiểu và tối đa của mỗi khoảng khác biệt [Tôi*2n/m,(Tôi+1)*2n/m) với Tôi= =0,...,m/2-1. Ví dụ: ở mức thu phóng 1 giảm các điểm [1 2 6 9 2 2 3 5] xuống [1 9 2 5] (1,9 là tối thiểu / tối đa của 4 điểm đầu tiên, 2,5 là tối thiểu / tối đa của 4 điểm thứ hai).
Vor

Câu trả lời:


1

Dưới đây là hai gợi ý để bạn thử.

Gợi ý 1: Sử dụng bộ lọc tuyến tính. Thay vì tính trung bìnhx2n,x2n+1(x2n+x2n+1)/2, hãy thử tính trung bình trên một chuỗi lớn hơn, ví dụ: yn= =(x2n-1+2x2n+2x2n+1+x2n+2)/6.

Gợi ý 2: Sử dụng bộ lọc có điều kiện: ifx2n<x2n+1>x2n+2 hoặc là x2n-1<x2n>x2n+1, sau đó để y= =x2n+1 hoặc là y= =x2n, tương ứng, và tương tự cho cực tiểu địa phương; mặt khác sử dụng trung bình (hoặc bộ lọc tuyến tính) như trước đây.


Của bạn "y= =x2n+1 (y= =x2n) Ký hiệu không rõ ràng.
James Waldby - jwpat7
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.