Springen naar inhoud

Mathematica: lijstjes maken


  • Log in om te kunnen reageren

#1

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 02 mei 2009 - 16:27

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?

Veranderd door Lapzwans, 02 mei 2009 - 16:27


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 02 mei 2009 - 17:19

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
A={{1,2,3},{4,5,6},{7,8,9};
Dan geeft
B=Transpose[A]
het antwoord
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 -

#3

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 02 mei 2009 - 17:52

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

#4

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 02 mei 2009 - 17:53

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

#5

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 02 mei 2009 - 18:37

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

Veranderd door Lapzwans, 02 mei 2009 - 18:38


#6

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 02 mei 2009 - 19:44

Weet niet of het de elegantste methode is, maar dit werkt:
Table[{l1[[i]], l2[[i]]}, {i, 1, 3}]
Never express yourself more clearly than you think.
- Niels Bohr -

#7

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 02 mei 2009 - 19:52

Bedankt, dat werkt inderdaad ;)

#8

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 02 mei 2009 - 20:51

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?

#9

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 02 mei 2009 - 20:59

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 -

#10

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 03 mei 2009 - 00:25

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

#11

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 03 mei 2009 - 00:56

Huh? Hier gaat het gewoon goed. Zeker weten de volledige code (exact) overgenomen?

De output is simpelweg
{{{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 -

#12

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 03 mei 2009 - 01:18

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

Veranderd door Lapzwans, 03 mei 2009 - 01:23


#13

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 03 mei 2009 - 03:25

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

#14

Lapzwans

    Lapzwans


  • >100 berichten
  • 145 berichten
  • Ervaren gebruiker

Geplaatst op 03 mei 2009 - 04:03

Nog een vraagje, dit keer maar even een plaatje erbij.

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

Veranderd door Lapzwans, 03 mei 2009 - 04:04


#15

Phys

    Phys


  • >5k berichten
  • 7556 berichten
  • VIP

Geplaatst op 03 mei 2009 - 13:12

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
fit2 = Table[Regress[L1[[i]], x, x, RegressionReport -> {BestFitParameters}], {i, 1, 2}]
Never express yourself more clearly than you think.
- Niels Bohr -





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures