홈으로 돌아가기

매트릭스 다운샘플링 필터 50M 포인트

매트릭스 필터는 5천만 포인트 산점도를 완벽하게 렌더링하며 100% 시각 커버리지를 보존합니다. LTTB, M4와의 비교에서 고전적 방법의 구조 손실이 드러납니다. 산업 데이터셋에 대한 전체 코드 및 벤치마크.

완벽한 다운샘플링: 산점도의 100% 커버리지
Advertisement 728x90

5000만 포인트 산점도 완벽 다운샘플링을 위한 매트릭스 필터

유정 압력 데이터 5천만 포인트를 렌더링할 때 매트릭스 필터는 100% 커버리지와 시각적 충실도를 제공합니다. 기존 알고리즘(LTTB 등)은 데이터 밀도 최대 59% 손실. 이 방법은 정렬 없이 단일 패스로 작동하며, 출력은 화면 픽셀 수로 제한됩니다.

산점도는 불규칙 데이터와 간극에 필수적입니다: 선 그래프는 단절을 왜곡하고 클러스터를 숨깁니다. 기존 방법은 선 차트에 최적화되어 2D 구조를 간과합니다.

기존 알고리즘의 한계

MinMax, M4, LTTB, 하이브리드는 X축을 빈으로 나누고 빈당 1~4개 Y 포인트를 선택합니다. 밀집 열에서 96~99% 데이터 손실: 구름이 극단으로 붕괴됩니다.

Google AdInline article slot
  • MinMax: 최소/최대 — 피크는 잡지만 분포 무시.
  • M4: 처음/마지막/최소/최대 — 선 그래프에 픽셀 퍼펙트.
  • LTTB: 최대 삼각형 면적 — 곡선 실루엣.
  • MinMaxLTTB: 극단 고정 후 스무딩.

산점도에서 치명적 결함: 빈 내 Y 좌표 무시.

매트릭스 필터 원리

그래픽스의 Voxel Grid Filter와 유사: 포인트를 W×H 픽셀 그리드로 투영. 순회 순서로 셀당 한 포인트만 남김.

public static void downsample(
        double[] times, double[] values,
        int width, int height,
        List<double[]> result) {

    int n = times.length;
    if (n == 0) return;

    // Step 1: bounds
    double tMin = times[0], tMax = times[0];
    double vMin = values[0], vMax = values[0];
    for (int i = 1; i < n; i++) {
        if (times[i]  < tMin) tMin = times[i];
        if (times[i]  > tMax) tMax = times[i];
        if (values[i] < vMin) vMin = values[i];
        if (values[i] > vMax) vMax = values[i];
    }
    double tRange = Math.max(tMax - tMin, 1e-10);
    double vRange = Math.max(vMax - vMin, 1e-10);

    // Step 2: grid
    boolean[] grid = new boolean[width * height];

    // Step 3: filter
    for (int i = 0; i < n; i++) {
        int px = (int) Math.min(width  - 1, (times[i]  - tMin) / tRange * (width  - 1));
        int py = (int) Math.min(height - 1, (values[i] - vMin) / vRange * (height - 1));
        int idx = py * width + px;
        if (!grid[idx]) {
            grid[idx] = true;
            result.add(new double[]{times[i], values[i]});
        }
    }
}

렌더링 모방: 전체 집합으로 빛날 픽셀 점등. 시각화 전용, 통계 아님.

Google AdInline article slot

테스트 방법론

~3000개 유정 텔레메트리 데이터셋: 1.9만~5천만+ 포인트. 산점(2×2px)·선(1px) 모드에서 원본과 픽셀 단위 비교.

지표:

  • 커버리지: 알고리즘으로 커버된 원본 픽셀 %.
  • 정밀도: 알고리즘 픽셀이 원본에 속한 %.
  • F1-점수: 조화 평균.
  • 시각 점수: ±1px 허용 오차 F1 (서브픽셀 고려).

클래식 알고리즘은 MatrixFilter 출력(1920×1080)에 맞춰 예산 할당. 벤치마크: i7-7700K, Java 17, 단일 스레드.

Google AdInline article slot

실제 데이터 결과

규칙적 (~2만 포인트, 2930 파일)

산점도: MatrixFilter 1920×1080 — 모든 지표 100%. MatrixFilter 800×600 — 시각 99.6%, 포인트 반토막. 클래식: 커버리지 63~84%, 시각 76~95%.

| 알고리즘 | 평균 출력 | 총 ms | 커버 | 정밀 | F1 | 시각 |

|------------------|----------|-------|------|------|------|--------|

| Matrix 1920×1080 | 4939 | 695 | 100% | 100% | 100% | 100% |

| Matrix 800×600 | 2867 | 497 | 84.6%| 100% | 91.5%| 99.6% |

| MinMaxLTTB x4 | 4932 | 494 | 84.1%| 100% | 90.9%| 95.2% |

중대형

50만~5천만 포인트에서 Matrix는 ~ms/1만 포인트로 시각 100% 유지. LTTB는 밀집 데이터에서 커버리지 16~40% 급락.

주요 결론

  • 매트릭스 필터: 정렬 없이 픽셀 퍼펙트 산점도, O(n) 시간.
  • 기존 알고리즘: 넉넉한 예산에도 밀집 구름 구조 손실.
  • ±1px 시각 점수: Matrix 800×600은 풀 렌더와 구분 불가.
  • 시각화 전용: 선/통계는 별도 방법.
  • 불규칙 간극 산업 유전 데이터셋 테스트.

— Editorial Team

Advertisement 728x90

다음 읽기