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

Det er god trening å prate matematikk. Her er det fritt fram for alle. Obs: Ikke spør om hjelp til oppgaver i dette underforumet.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Svar
Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5648
Registrert: 24/05-2009 14:16
Sted: NTNU

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

Kode: Velg alt

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

Kode: Velg alt

    '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

Kode: Velg alt

 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.
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Svar