Mathematica: lijstjes maken

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 145

Mathematica: lijstjes maken

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?

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

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.
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

Natuurlijk, transpose! Dat zocht ik ;) Bedankt voor je hulp!

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

Graag gedaan!
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

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.?

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

Weet niet of het de elegantste methode is, maar dit werkt:

Code: Selecteer alles

Table[{l1[[i]], l2[[i]]}, {i, 1, 3}]
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

Bedankt, dat werkt inderdaad ;)

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

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?

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

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}]
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

Dank je wel voor je hulp. Van die commando loopt mijn computer echter bijna vast ;)

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

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}}}
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

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 ;)

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

Gelukkig maar ;)
Never express yourself more clearly than you think.

- Niels Bohr -

Gebruikersavatar
Berichten: 145

Re: Mathematica: lijstjes maken

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)

Gebruikersavatar
Berichten: 7.556

Re: Mathematica: lijstjes maken

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}]
Never express yourself more clearly than you think.

- Niels Bohr -

Reageer