|
>-----Original Message----- >From: owner-demug@XXXXXXX.ch >[mailto:owner-demug@XXXXXXX.ch] On Behalf Of Peter Pein >Sent: Saturday, February 12, 2005 5:34 AM >To: demug@XXXXXXX.ch >Subject: Re: Probleme mit do-Schleife > >Christine Ebling wrote: > >> Hallo! >> >>Ich habe Probleme mit einer do-Schleife. Konkret: >> >> >>Ich habe einen Vektor yvec, dem ich eine Matrix yperm zuordnen will >> >>yvec: >> >>1 >>3 >>0 >>5 >>2 >>0 >>4 >> >>yperm: >> >> 1 0 0 0 0 >> 0 0 1 0 0 >> 0 0 0 0 0 >> 0 0 0 0 1 >> 0 1 0 0 0 >> 0 0 0 0 0 >> 0 0 0 1 0 >> >> >>In Gauss funktioniert das mit "yperm=zeros(7,5); i=1; do >while i<=7; if >>yvec[i]>0;yperm[i,yvec[i]]=1; endif; i=i+1; endo;" >> >> >> >>Versuche ich nun eine ähnliche Schleife in Mathematica zu schreiben >> >>"yperm = Table[0, {7},{5}]; >>Do[if[yvec[[i]] > 0, yperm[[i, yvec[[i]]]] = 1, yperm[[i, 1]] >= 0], {i, >> nobs}];" >> >> >> so kommt leider nichts Ordentliches raus. Was mache ich >falsch? Kann >>mir irgendjemand weiterhelfen? >> >>Herzlichen Dank im Voraus! >> >>Christine Ebling >> >> >> >> >> >> >Hallo, > > Jens hat natürlich völlig Recht, aber etwas typischer für >Mathematica wäre z.B.: > >yvec = {1, 3, 0, 5, 2, 0, 4}; > >hilfsvec = Join[{1}, Table[0, {Max[yvec]}]]; yperm = >(Rest[RotateRight[hilfsvec, #]] & /@ yvec); yperm // TableForm > > 1 0 0 0 0 > 0 0 1 0 0 > 0 0 0 0 0 > 0 0 0 0 1 > 0 1 0 0 0 > 0 0 0 0 0 > 0 0 0 1 0 > > >-- >Peter Pein >Berlin > > "typisch für Mathematica" ist natürlich gefährliche Rede, ich hätte geschworen dass... yperm = PadRight[{1}, Length[yvec], 0, # - 1] & /@ yvec viel "typischer" ist als dein Vorschlag: yperm = Module[{hilfsvec = PadRight[{1}, Length[yvec] + 1]}, Rest[RotateRight[hilfsvec, #]] & /@ yvec] Aber dein Ding performt tatsächlich (deutlich!) besser, hol's der Geier! -- Hartmut Wolf |