Stran 1 od 1
Mathematica - List - manipuliranje s podatki
Objavljeno: 6.7.2009 13:30
Napisal/-a fogl
Kako lahko iz podatkov:
x = List[{1, 2, 3}]
y = List[{4, 5, 6}]
sestavim skupne podatke, ki bodo predstavljali točke z x in y koordinato
t = List[{{1, 4}, {2, 5}, {3, 6}}]
(z uporabo x in y spremenljivke)?
Kako pa iz
t = List[{{1, 4}, {2, 5}, {3, 6}}]
izluščim spet nazaj List-o s samo x koordinato?
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 6.7.2009 17:28
Napisal/-a Marjan
Jaz naredim tako:
x = List[1, 2, 3];
y = List[4, 5, 6];
data = Thread[{x, y}]
=> {{1, 4}, {2, 5}, {3, 6}}
data[[All, 1]]
=> {1, 2, 3}
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 6.7.2009 21:06
Napisal/-a Aniviller
Transpose[{x,y}]
Da dobis nazaj "x" pa se enkrat transponiras in vzames prvi element.
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 28.9.2010 7:51
Napisal/-a fogl
Bom kar tukaj nadaljeval...
Imama tabelo oblike:
{{11, 12, 13}, {21, 22, 23}, {31, 32, 33}}
in bi jo rad pretvoril v obliko
{{{11, 12}, 13}, {{21, 22}, 23}, {{31, 32}, 33}}
In mi nikakor ne uspe (vsaj ne s funkcijo Partition)
Mogoče kdo ve kako se to naredi?
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 28.9.2010 11:32
Napisal/-a fogl
Pa še en problem imam, ki ga ne znam rešit:
Napisal sem funkcijo:
Koda: Izberi vse
cas[YMD_, HMS_] := DateList[{StringJoin[YMD, " ", HMS], {"Year", "Month", "Day","Hour", "Minute", "Second"}}];
SetAttributes[cas, Listable];
cas[{"2009-07-01", "01:30:00"}, {"2009-07-01", "01:30:00"}]
cas[{{"2009-07-01", "01:30:00"}, {"2009-07-01", "01:30:00"}}]
rezultat tega je:
Koda: Izberi vse
{{2009, 9, 22, 17, 7, 1}, {3, 5, 31, 1, 30, 0}}
{{cas["2009-07-01"], cas["01:30:00"]}, {cas["2009-07-01"], cas["01:30:00"]}}
Problem je, da so liste (List) vedno oblike {{},{},{}} in mi ne izračuna prav, v obliko {},{},{} je pa ne znam pretvorit, če se sploh da...
Mogoče kdo ve kako to rešit?
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 28.9.2010 17:28
Napisal/-a Aniviller
V mathematici ima vsaka stvar "glavo". Ce je navaden list je to List[], ce je funkcija nekih argumentov je f[...] in tako naprej.
Glavo lahko zamenjas. Tako da ce te muci tole:
Koda: Izberi vse
f[{x,y,z}] kar je enako f[List[x,y,z]]
naredi tole:
(glavo "List" smo zamenjali z glavo "f" oziroma kakrsnakoli funkcija je ze v igri.
Mislim da deluje tudi f[Sequence[{x,y,z}]] (Sequence nekako "raztopi" zunanje oklepaje da izginejo ko das funkcijo okoli).
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 30.9.2010 8:47
Napisal/-a fogl
Sem poskusil vse variante, ampak deluje samo ena.
Klik
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 30.9.2010 10:07
Napisal/-a Aniviller
Uh. Ok Sequence ne deluje zato ker si dal atribut Listable in gre pregloboko noter (Sequence + Listable imata skupni efekt da popolnoma razstavi 2D array). Nasploh casL ne bi smel biti Listable ker v definiciji zahtevas da je array, kar se pa nikoli ne zgodi ker Listable takoj potegne funkcijo znotraj arraya.
Ostalo je logicno.
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 30.9.2010 10:49
Napisal/-a fogl
Mani ni nič več logično, še tisti kar sem mislil da je ni več
Rad bi enostavno podatke shranjene v xx pretvoril v pripadajoče čase
Klik
Enako kot če bi uporabil funkcijo Log[ {a, b, c}], le da so v mojem primeru a, b in c sestavljeni iz dveh spremenljivk. Simpl, ampak ne znam
Zdaj imam to rešeno s for zanko, ampak najbrž obstaja kaka bolj enostavna varianta.
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 30.9.2010 11:14
Napisal/-a Aniviller
Aja to bi rad. No tukaj imas najmanj 10 moznosti. Najbolj obicajna je "uporabi funkcijo na vseh elementih arraya", kar se uporablja skozi. To je funkcija "Map" ampak se vedno klice kar s kratko notacijo:
To samo nese funkcijo v oklepaj. Nekaj takega bi moral doseci z Listable ampak temu tezje dopoves da ti ne razdre tudi arrayev znotraj zunanjega lista (jaz se tem modifierjem funkcij izogibam ker povzrocijo da se funkcija obnasa drugace kot pricakovano).
Tisto kar sem ti pa prej razlagal (z @@) je pa razlikovanje med cas in casL:
S tem "Map" moras pazit, ce ni funkcija ene spremeljivke: v tem primeru lahko sestavis "cisto funkcijo" na mestu. Recimo ce hoces kvadrirat vse elemente arraya, naredis
(#^2 &) je sproti definirana funkcija: # je argument, & pa pove da naj tisto prej smatra kot funkcijo.
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 30.9.2010 11:31
Napisal/-a fogl
1000x hvala
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 4.10.2010 10:08
Napisal/-a fogl
Še nekaj me muči... rad bi začetne podatke na enostaven način združil v obliko v zadnji vrstici
Klik. Poskusil sem z Append in MapThread, pa ne funkcionira. Kaka ideja?
Re: Mathematica - List - manipuliranje s podatki
Objavljeno: 4.10.2010 14:13
Napisal/-a Aniviller
Ok lahko bi malo kombiniral z Map in podobnimi zadevami ampak imamo lepse nacine.
Imas dve lepi sansi. Prva je, da prvo "matriko" transponiras (v eni vrstici te matrike sicer ne bodo stevilke ampak dvokomponentni vektorji ampak to mislim da ga ne moti ker gleda samo prvi dve dimenziji problemcka).
Dobis
Zdaj so pac prvi elementi skupaj, drugi elementi skupaj. Temu zdaj appendas tvoj dodatek da dobis tole:
Koda: Izberi vse
{
{{a,b},{c,d},{e,f}},
{x,y,z},
{u,v,w}
}
in transponiras nazaj.
Lahko pa uporabis "Inner" ki je posplosen skalarni produkt - na istolezni elementih naredi nekaj, v nasem primeru Append.