Tatsächlich enthält die library auch noch ein, zwei andere Funktionalitäten. Aber sie ist ohnehin nur für den internen Gebrauch, und lesen tut das hier ja sowieso niemand geschweige denn eine Utility-Lib auf irgendwelche Verletzungen einer High-Level-Separation-Of-Concerns hin zu untersuchen.
Die Hauptfunktionalitäten sind:
- Sampling, d.h. zufällige Teilmengen („samples“) aus Listen ziehen
- Sliding Windows über Listen
- Splitten von Listen durch Extrahieren und Auslassen
Die Methoden sind dabei i.a. so implementiert, dass sie streams der Ergebnislisten liefern.
Und insbesondere sind letztere so implementiert, dass sie ausschließlich auf views der windows/chunks der Listen arbeiten. Das ist praktisch, wenn man z.B. ein Sliding Window der Größe 100000 mit Schritten der Größe 1 über eine Liste mit 1000000 Elementen laufen lassen will. Dass dort nicht 1 Million mal eine neue Liste mit 100000 Einträgen erstellt werden muss, wird einem der GC sicher danken.
Und wenn man mal eine Liste mit 10 Millionen Elementen hat, und darauf eine 10-Fach-Kreuzvalidierung machen will, freut einen das hier vielleicht:
input size : 194952968 bytes ( 185.92 MiB)
training size: 400 bytes ( 0.00 MiB)
test size : 720 bytes ( 0.00 MiB)
Ja, eine Liste mit 9 Millionen Elementen und eine Liste mit 1 Million Elementen, die zusammen etwa ein Kilobyte (!) Speicher belegen.
Big data. So memory. Much efficient.
Vermutlich push’ ich die demnächst auch noch in die Maven Central.