DMUG-Archiv 2005

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

RE: Probleme mit do-Schleife

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




Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html