Avatar billede hurra Novice
13. januar 2009 - 14:13 Der er 9 kommentarer og
1 løsning

Sammenlign arrays af doubles

Hej experter, jeg har virklig brug for nogle kloge hoveder.

Jeg er i gang med at lave et program der skal finde nogle værdier fra en database, alt efter hvordan en serie af måle data ser ud.

En kort forklaring til problemet:

Lad os sige, at det perfekte set måle data var {1, 2, 3, 4, 5, 6}.
jeg har 2 målinger i min database:
{1.5, 2.5, 3.5, 4.5, 5.5, 6.5}
{0.5, 1.5, 2.5, 3.5, 4.5, 5.5}

Nu laver jeg så en måling, og får følgende:
{1.4, 2.4, 3.4, 4.4, 5.4, 6.4}

jeg skal så finde ud af hvilken entry i databasen der minder mest om den nye måling.

Det er jo ret let, at finde ud af hvor meget den gennemsnitlige fejl er, og så finde den tidligere måling der ligger tættest på det.

Men hvis jeg så har en måling som nogle nye målinger som
{1.3, 2.3, 3.3, 3.7, 4.7, 5.7}
{0.7, 1.7, 2.7, 4.3, 5.3, 6.3}

Gennemsnitlig er de to sæt målinger jo nødagtigt lige meget forkerte, men aligevel er de meget forskelligt.

Der er ikke nogen helt fast størrelse på hvad der skal måles, der kan være mellem 5 og 10.000 målinger, så der er ingen mulighed for at filtreringen skal foregå i min sql string. Min tanke var at ha et, måske at par, tal der beskriver kurvens form og offset.

Er der nogen af jer der kan beskrive ganske kort, hvilken teknik jeg skal bruge, og evvt give nogle links til ydderligere læse stof?
Avatar billede segmose Nybegynder
13. januar 2009 - 14:34 #1
Hvis du bare skal have en eller anden vurdering af kvaliteten så tag forskellen for hver data punkt og gang med sig selv, lav en sum af det for hvert data set.

ellers læs lidt på
http://en.wikipedia.org/wiki/Standard_deviation
Avatar billede hurra Novice
13. januar 2009 - 14:41 #2
Det kommer ikke til at gå, i hvert fald ikke hvis det er det eneste tal jeg skal bruge. Men det er rigtigt at det er en god måde at beskrive offsettet på.

Hvis du ser på de 2 sidste sæt data i spørgsmålet, vil stddev være det samme for de 2 sæt, selv om formen for de 2 sæt er meget forskellig.
Avatar billede segmose Nybegynder
13. januar 2009 - 15:38 #3
Lad os lige navngive de forskellige set:
P:{1, 2, 3, 4, 5, 6}
DB1:{1.5, 2.5, 3.5, 4.5, 5.5, 6.5}
DB2:{0.5, 1.5, 2.5, 3.5, 4.5, 5.5}

"Nu laver jeg så en måling, og får følgende:"
M1:{1.4, 2.4, 3.4, 4.4, 5.4, 6.4}

"Men hvis jeg så har en måling som nogle nye målinger som"
M2:{1.3, 2.3, 3.3, 3.7, 4.7, 5.7} : ((0,2)^2x3+(0,8)^2x3)/6 for DB1
M3:{0.7, 1.7, 2.7, 4.3, 5.3, 6.3} : ((0,8)^2x3+(0,2)^2x3)/6 for DB1

De er ens set i forhold til DB1 og P (0,3 afvigelse for alle værdier).

Så skulle man se på forskellene i % for hvert måling i hvert sæt, forskel til DB1:
Første værdi er 1.5
M2: (1.5-1.3)/1.3 = 15%
M3: (1.5-0.7)/0.7 = 114%
osv.
så totalt afviger M2 83% fra DB1 og 134% fra DB2, M3 afviger 203% fra DB1 og 94% fra DB2. Så M2 er en DB1 og M3 en DB2.

Men jeg kan dårligt sige om dette er retvisende for dine data.
Avatar billede hurra Novice
13. januar 2009 - 16:00 #4
Nååh ja, klart nok, det har du ret i. Men så skal jeg hver gang jeg tager en måling sammen ligne den med alle tidligere målinger for at finde den bedste.

Hvis nu der er 1.000.000 tidligere målinger, kommer dette ogås til at tage et stykke tid at beregne. Så er muligheden jo selvføldig at ryde op i databasen, og kun gemme nogle rimelig unikke måle data.

Mit håb var, at jeg hver gang jeg laver et nyt sæt målinger, kan beregne 'determinanten' for det sæt, gemme det i databasen, og så lave en søgning i databasen, efter de determinanter der er ca samme værdi som den nye. På den måde får jeg kun én beregning for hver ny sæt målinger.
Avatar billede segmose Nybegynder
13. januar 2009 - 16:22 #5
Du kunne måske beregne alle dine gemte sæts afvigelser fra det Perfekte sæt i en sorteret liste efter afvigelsens størrelse (med et hurtigt søgetræ).
Beregne den nye målings afvigelse fra den perfekte størrelse.
Finde de nærmeste 10,100 eller 1000 fra DB og sammenligne med dem.
Dette vil kun være en heuristik og ikke en 100% sikkert at du finder det rigtige match.
Avatar billede hurra Novice
13. januar 2009 - 17:00 #6
Jeg fik lige en anden ide, den er slet ikke gennemtænkt, men jeg prøver lige at slynge den ud aligevel.

Hvis nu hver gang der bliver lavet en ny måling, bliver beregnet stddev i forhold til p. Samtidig bliver der beregnet en eller anden alternetiv p, der kommer til at krydse linien for en oprindelige p, exempelvis en lige linie fra p[0]+1 til p[n]-1, evt kunne der også være lavet offset til den originale p.

På denne måde, vil der ikke kunne være 2 forskellige linier, der har samme 3 tal. Er det ikke smart, eller har jeg glemt noget :)?
Avatar billede segmose Nybegynder
13. januar 2009 - 18:37 #7
Øh, det kan jeg ikke gennemskue :)
Avatar billede arne_v Ekspert
14. januar 2009 - 02:56 #8
Hvis du har n gamle dataset DS1,...,DSn og et ny dataset X, så skal du vel finde det j hvor:

SUM (X(i)-DSj(i))^2
i

er mindst.
Avatar billede hurra Novice
15. januar 2009 - 13:17 #9
Det er også lige nødagtigt det segmose foreslår.

Jeg efter prøvede min teori med at sammenligne data med 3 fast 'kurver'. Det var ikke umidlbart en success, ihvert fald kan jeg ikke lige gennemskue at finde sammen hænget mellem de tre tal.

Jeg tror vejen frem bliver som segmose også foreslår, at udvælge 10-100 set målinger der repræsentere alle mine tænklige målinger. Og så kun sammmen ligne mine nye målinger med de 10-100.

Jeg kom til at tænke på en anden ting. Hvordan virker en finderaftryks scanner? Får man vel heller ikke en entydig tal ud af den. Og hvis man så har en database med 1.000.000 fingeraftryk i, kommer det også til at tage noget tid at søge i den. Men det gør det jo selvføldig også i CSI :)
Avatar billede hurra Novice
19. januar 2009 - 10:12 #10
Jeg kommer nok ikke nærmere. Lige nu, men det bliver noget jeg kommer til at rode med det næste lange stykke tid, så jeg skal nok sige til hvis jeg lige pludslig får en genial ide :) Hvis der skulle være nogen der får lyst til det, vil jeg meget gerne ha en prej, jeg åbner gerne en ny tråd og deler points ud igen.

Indtil nu har jeg besluttet mig for at gå efter segmoses forslag, altså finde mig nogle tidligere målinger der bedst muligt kan repræsentere alle fremtidige målinger.

Men tak for hjælpen indtil nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester