Pagina 1 van 4

Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 17:27
door Lapzwans
Ik heb een aantal lijstjes, bijvoorbeeld:

Data =

{1, 2, 3}

{4, 5, 6}

{7, 8 9}

Nu wil ik nieuwe lijstjes maken met alle waarden uit elke kolom, dus dat ik de volgende lijstjes krijg:

{1, 4, 7}

{2, 5, 8}

{7, 8, 9}

Dit probeer ik met Take[data, All, 1] en dan krijg ik:

{{1}, {4}, {7}}

Dit geeft dus wel alle cijfers uit de eerste kolom, maar niet in één lijstje zoals ik wil. Daarnaast wil ik in één keer alle kolommen doen, dus niet dat ik dan ook nog eens Take[data, All, 2] en Take[data, All, 3] moet doen voor de rest van de lijstjes. Hoe kan ik dit doen?

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 18:19
door Phys
Lapzwans schreef:Data =

{1, 2, 3}

{4, 5, 6}

{7, 8 9}

Nu wil ik nieuwe lijstjes maken met alle waarden uit elke kolom, dus dat ik de volgende lijstjes krijg:

{1, 4, 7}

{2, 5, 8}

{7, 8, 9}
Moet die laatste niet {3,6,9} zijn?

Zo ja, dan lijkt me het voor de hand liggen om er een matrix van te maken, en dan gewoon transponeren.

Dus

Code: Selecteer alles

A={{1,2,3},{4,5,6},{7,8,9};
Dan geeft

Code: Selecteer alles

B=Transpose[A]
het antwoord

Code: Selecteer alles

B={{1, 4, 7}, {2, 5, 8}, {3, 6, 9}}
zodat B[[1]]={1,4,7}, B[[2]]={2,5,8}, etc.

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 18:52
door Lapzwans
Natuurlijk, transpose! Dat zocht ik ;) Bedankt voor je hulp!

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 18:53
door Phys
Graag gedaan!

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 19:37
door Lapzwans
Nog een vraagje als het niet erg vindt.

Ik heb twee lijstjes, l1 = {1, 2, 3} en l2 = {4, 5, 6}. Nu wil ik het eerste element van lijstje 1 bij het eerste element van lijstje 2 voegen, enz. Dus dat ik dit krijg:

l3 = {1,4}, {2, 5}, {3, 6}

Volgens mij moet dit met Table o.i.d.?

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 20:44
door Phys
Weet niet of het de elegantste methode is, maar dit werkt:

Code: Selecteer alles

Table[{l1[[i]], l2[[i]]}, {i, 1, 3}]

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 20:52
door Lapzwans
Bedankt, dat werkt inderdaad ;)

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 21:51
door Lapzwans
Nu heb ik toch nog één vraagje, deze is wat ingewikkelder.

Stel nu ik heb de volgende lijsten:

L1 = {a, b, c}

L2 = {1, 2, 3}, {4, 5, 6}, {7, 8, 9}

Nu wil ik graag het eerste element van L1 combineren met alle eerste elementen van L2 enzovoort, zoals zonet, maar in dit geval bestaat L2 uit meerdere lijstjes. Dus dan bestaat L3 niet uit één lijstje meer zoals bij mijn vorige vraag, maar uit drie. Wat ik bedoel is dit:

L3 = {{a, 1}, {b, 2}, {c, 3}}, {{a, 4}, {b, 5}, {c, 6}}, {{a, 7}, {b, 8}, {c, 9}}

Iemand enig idee?

Re: Mathematica: lijstjes maken

Geplaatst: za 02 mei 2009, 21:59
door Phys

Code: Selecteer alles

L1 = {a, b, c};

L2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

Table[Table[{L1[[i]], L2[[k]][[i]]}, {i, 1, 3}], {k, 1, 3}]

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 01:25
door Lapzwans
Dank je wel voor je hulp. Van die commando loopt mijn computer echter bijna vast ;)

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 01:56
door Phys
Huh? Hier gaat het gewoon goed. Zeker weten de volledige code (exact) overgenomen?

De output is simpelweg

Code: Selecteer alles

{{{a, 1}, {b, 2}, {c, 3}}, {{a, 4}, {b, 5}, {c, 6}}, {{a, 7}, {b, 8}, {c, 9}}}

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 02:18
door Lapzwans
Die hierboven lukt wel inderdaad. Probleem is dat het lijstje L1 dat ik daadwerkelijk gebruik 108 elementen heeft en mijn L2 heeft dus 12 lijstjes van 108 elementen.

Edit: Ik deed hem gewoon verkeerd. Voor i vulde ik correct 108 in, maar voor k ook. De waarde van k moest echter 12 zijn natuurlijk ;)

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 04:25
door Phys
Gelukkig maar ;)

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 05:03
door Lapzwans
Nog een vraagje, dit keer maar even een plaatje erbij.

Afbeelding

Zoals je kunt zien bestaat L1 uit twee lijstjes. Op beide lijstjes heb ik een Linear Regress uitgevoerd en het resultaat staat eronder. Nu wil ik eigenlijk die waarden die ik gevonden heb (dus de a en b uit de functie y = a + bx) 'tastbaar' maken, zodat ik ermee kan werken. Dus ik wil krijgen:

L2 = {0.666667, 1.5}, {1.66667, 1}

Enig idee Phys? (Of iemand anders natuurlijk)

Re: Mathematica: lijstjes maken

Geplaatst: zo 03 mei 2009, 14:12
door Phys
A.u.b. ook de code meegeven (bij voorkeur in code-tags), zodat ik het niet helemaal hoef over te typen =D>

Anyway, doe het volgende: kopieer de tweede regel (en vervang fit door bijv. fit2, dat spreekt voor zich), waarbij je "BestFit" vervangt door "BestFitParameters".

Dus

Code: Selecteer alles

fit2 = Table[Regress[L1[[i]], x, x, RegressionReport -> {BestFitParameters}], {i, 1, 2}]