Page 1 of 1

Søke gjennom flere lister etter en liste med element [Matla]

Posted: 21/01-2013 23:21
by Nebuchadnezzar
Fikler litt med lister og slikt i matlab, har flere lister lagret i celler og ønsker å finne elementer i disse.

Mer konkret har jeg en lister over eksempelvis brus, en liste er en liste med forkortelser, mens en annen liste er fullt navn. Eksempelvis

Code: Select all

    'cola'
    'flote'
    'blå'
    'grønn'
    'orange'
    'rød'
    'gren'
    'sprite'
    'chili'
    'hel'
    'melk'
    'vann'

Code: Select all

    'Coca Cola'
    'Fløte'
    'Gele Blå'
    'Gele Grønn'
    'Gele Orange'
    'Gele Rød'
    'Röses Grenadine'
    'Sprite'
    'Tabasco'
    'Tine Helmelk'
    'Tine Melk'
    'VATN'
Ønsket input og output er vist under

Code: Select all

 A = Finn('Fløte,Vann,chilli',Liste1, Liste2) 

A = [ 2  12  9 ]
Altså jeg legger inn en liste og får radnummeret. Jeg ønsker og muligheten for å bare legge inn en liste, slik at jeg for eksempel bare kan søke liste1. Hva er den mest elegante måten å gjøre dette på?
Samtidig ønker jeg og å få ut en liste med alt jeg ikke fant.

Jeg har selv skrevet en kode som fungerer en den smerter sjelen min bare jeg tenker på koden.
I korte trekk sjekker jeg om input er av riktig format, og hvor mange lister som tas inn. Her godtar jeg bare 1 eller 2. Så formaterer jeg listene, fjerner mellomrom, store små bokstaver osv. Så tester jeg om strengene er like via ismember funksjonen.
De strengene den ikke fant i første liste, testes i neste liste.
Strenger som failer på begge disse blir sendt inn i en annnen funksjon som sjekker om strengene er innenfor et tegn fra en streng i liste1 eller 2. Det jeg frykter er at alle disse sjekkene gjør koden treg. Og det ville vært raskere å bare søke gjennom strengene og fjærne dobbelgjengere etterpå. Krever det mye ressurer av matlab å fjærne rader fra lister, sammenliknet med å søke gjennom alle sammen?

http://pastebin.com/u36UzXM3

Og hva er raskest av ismember og scrmpi for korte lister av strenger ?
Bruker jeg sistnevnte må jeg jo loope igjennom alle elementene jeg vil søkge etter.