Mathematica - List - manipuliranje s podatki
Mathematica - List - manipuliranje s podatki
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?
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
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}
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
Transpose[{x,y}]
Da dobis nazaj "x" pa se enkrat transponiras in vzames prvi element.
Da dobis nazaj "x" pa se enkrat transponiras in vzames prvi element.
Re: Mathematica - List - manipuliranje s podatki
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?
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
Pa še en problem imam, ki ga ne znam rešit:
Napisal sem funkcijo:
rezultat tega je:
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?
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"}}]
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"]}}
Mogoče kdo ve kako to rešit?
Re: Mathematica - List - manipuliranje s podatki
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:
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).
Glavo lahko zamenjas. Tako da ce te muci tole:
Koda: Izberi vse
f[{x,y,z}] kar je enako f[List[x,y,z]]
Koda: Izberi vse
f@@{x,y,z} kar je enako f[x,y,z]
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
Sem poskusil vse variante, ampak deluje samo ena. Klik
Re: Mathematica - List - manipuliranje s podatki
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.
Ostalo je logicno.
Re: Mathematica - List - manipuliranje s podatki
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.
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
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.
Koda: Izberi vse
casL/@xx
Tisto kar sem ti pa prej razlagal (z @@) je pa razlikovanje med cas in casL:
Koda: Izberi vse
casL[enlist] ... cas@@enlist
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
Koda: Izberi vse
#^2& /@ array
Re: Mathematica - List - manipuliranje s podatki
1000x hvala
Re: Mathematica - List - manipuliranje s podatki
Š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
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:
in transponiras nazaj.
Lahko pa uporabis "Inner" ki je posplosen skalarni produkt - na istolezni elementih naredi nekaj, v nasem primeru Append.
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
Koda: Izberi vse
{
{{a,b},{c,d},{e,f}},
{x,y,z}
}
Koda: Izberi vse
{
{{a,b},{c,d},{e,f}},
{x,y,z},
{u,v,w}
}
Lahko pa uporabis "Inner" ki je posplosen skalarni produkt - na istolezni elementih naredi nekaj, v nasem primeru Append.
Koda: Izberi vse
Inner[Append,aa,uu,List]