Grupowanie punktów danych
Klasteryzacja punktów danych
DataPoint, Cluster i ClusterCollection to mały, ogólnego przeznaczenia zestaw narzędzi do hierarchicznego grupowania aglomeracyjnego, dołączony do Aspose.PDF FOSS dla Python. Są to ogólne prymitywy grupowania danych — punkt współrzędno-etykietowy, grupa elementów i kolekcja grup — a nie funkcja specyficzna dla dokumentu PDF; nic w tym module nie odczytuje ani nie zapisuje treści PDF. Użyj ich, gdy Twój własny kod musi grupować wartości liczbowe (na przykład pomiary, które już wyodrębniłeś z dokumentu) w klastry i podsumować klaster za pomocą jego środka ciężkości.
Reprezentowanie punktu danych
DataPoint łączy identyfikujący name z value listą współrzędnych liczbowych. Oba są udostępniane jako DataPoint.name i DataPoint.value po konstrukcji.
Tworzenie i kopiowanie klastrów
Cluster opakowuje opcjonalną listę elementów w pojedynczą grupę. Cluster.count raportuje, ile elementów klaster aktualnie zawiera, Cluster.contains() sprawdza, czy dany element jest członkiem, a Cluster.clone() zwraca niezależną kopię opartą na własnej liście elementów. Cluster.empty() zwraca współdzieloną, jedyną instancję pustego klastra zamiast alokować nową przy każdym wywołaniu.
Grupowanie klastrów w kolekcji
ClusterCollection opakowuje opcjonalną listę instancji Cluster w jedną kolekcję, dając Ci jeden obiekt do przekazywania, gdy funkcja musi przyjmować lub zwracać więcej niż jeden klaster jednocześnie.
Obliczanie centroidu klastra
DataPoint.get_centroid() oblicza średnią współrzędnych każdego punktu danych w Cluster, pozycję po pozycji, i zwraca nowy DataPoint reprezentujący centroid. Każdy punkt w klastrze musi mieć taką samą liczbę wymiarów w DataPoint.value, aby średnia miała sens.
Wskazówki i najlepsze praktyki
- Utrzymuj każdą listę
DataPoint.valueo takiej samej długości w obrębie klastra —DataPoint.get_centroid()oblicza średnie współrzędne pozycję po pozycji, więc niezgodne wymiary powodują wprowadzający w błąd centroid. - Użyj
Cluster.empty()jako współdzielonego, jedynkowego pustego klastra zamiast tworzyć nowy pusty klaster, gdy potrzebujesz tylko wartość zastępczą. - Wywołaj
Cluster.clone()przed modyfikacją klastra, którego oryginał potrzebujesz w innym miejscu — klonowanie kopiuje listę elementów zamiast tworzyć alias. - Użyj
ClusterCollection, gdy funkcja musi przyjmować lub zwracać więcej niż jedenClusterjako pojedynczą wartość. - Te klasy są ogólnymi narzędziami, a nie funkcją parsowania PDF — połącz je ze swoją własną logiką generowania wartości
DataPointz danych dokumentu.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
DataPoint.get_centroid() generuje centroid z nieoczekiwaną liczbą wartości | Punkty danych w klastrze mają listy DataPoint.value o różnych długościach | Upewnij się, że każdy DataPoint dodany do Cluster ma tę samą wymiarowość |
Cluster.contains() zwraca False dla wartości, którą oczekujesz, że będzie obecna | Członkostwo jest sprawdzane bezpośrednio względem przechowywanych obiektów elementów, więc dwie osobno skonstruowane instancje DataPoint o tej samej nazwie i wartości nie są automatycznie traktowane jako równe przy wyszukiwaniach opartych na tożsamości | Użyj ponownie tej samej instancji DataPoint lub porównaj za pomocą DataPoint.name i DataPoint.value, zanim założysz przynależność |
| Modyfikacja sklonowanego klastra zmienia również oryginał | Cluster.clone() został pominięty, a ta sama referencja Cluster została współdzielona zamiast skopiowana | Wywołaj Cluster.clone() najpierw, gdy wywołujący potrzebuje niezależnej kopii |
FAQ
Jaka jest różnica między Cluster a ClusterCollection?
Cluster zawiera listę elementów — zazwyczaj instancje DataPoint — które należą do jednej grupy. ClusterCollection zawiera listę obiektów Cluster: grupuje klastry razem, a nie pojedyncze punkty danych.
Czy DataPoint.get_centroid() modyfikuje podany klaster?
Nie. Odczytuje elementy już znajdujące się w dostarczonym Cluster i zwraca nowy DataPoint dla centroidu; źródłowy klaster i jego elementy pozostają niezmienione.
Czy ta funkcja grupowania jest specyficzna dla treści PDF?
No. DataPoint, Cluster i ClusterCollection są ogólnymi prymitywami do grupowania liczb, dostarczanymi w pakiecie aspose_pdf. Nie odczytują one stron, tekstu ani żadnej innej struktury PDF — działają wyłącznie na wartościach, które im przekazujesz.
Dlaczego Cluster.empty() zwraca tę samą instancję za każdym razem?
Cluster.empty() zwraca współdzielony singleton, aby wielokrotne wywołania dla „no cluster” nie alokowały nowego obiektu przy każdym wywołaniu.
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
DataPoint | Nazwany punkt przechowujący listę współrzędnych numerycznych |
DataPoint.name | Identyfikująca nazwa punktu |
DataPoint.value | Lista numerycznych współrzędnych punktu |
DataPoint.get_centroid() | Zwraca nowy DataPoint będący średnią współrzędnych wszystkich punktów w klastrze |
Cluster | Grupa elementów, zazwyczaj instancje DataPoint |
Cluster.empty() | Zwraca współdzielony pusty klaster singleton |
Cluster.contains() | Sprawdza, czy element znajduje się w klastrze |
Cluster.clone() | Zwraca niezależną kopię klastra |
Cluster.count | Liczba elementów aktualnie znajdujących się w klastrze |
ClusterCollection | Opakowuje listę instancji Cluster w jedną kolekcję |