Seite 1 von 1

Betrag von Vektor

Verfasst: Donnerstag 5. August 2010, 13:25
von mzh
Hallo zusammen
Das ist ein Vektor a:

Code: Alles auswählen

0.144
1.237
0.458
0.855
0.304
0.265
0.244
0.234
0.153
0.145
0.138
0.464
0.228
0.398
0.242
0.219
0.322
0.185
0.109
Davon will ich den Betrag ausrechnen. Gibt es keine Lösung, dass ohne

Code: Alles auswählen

val = 0
for i in a:
    val += i*i
print math.sqrt(val)
val erst deklariert werden muss? Ich bin nicht sicher, aber gibt es da nicht ein numpy Trick?

Besten Dank für Hinweise.

Re: Betrag von Vektor

Verfasst: Donnerstag 5. August 2010, 13:46
von cofi
Bis jemand eine numpy-Loesung hat:

Code: Alles auswählen

math.sqrt(sum(i*i for i in a))

Re: Betrag von Vektor

Verfasst: Donnerstag 5. August 2010, 13:53
von BlackJack
@mzh: Vielleicht nicht die beste, aber immerhin eine "`numpy`-Lösung":

Code: Alles auswählen

In [567]: math.sqrt((a * a).sum())
Out[567]: 1.8745943561208116

Re: Betrag von Vektor

Verfasst: Donnerstag 5. August 2010, 14:07
von gkuhl
Weitere ''numpy''-Lösungen:

Code: Alles auswählen

In [21]: from numpy.linalg import norm

In [22]: import numpy

In [23]: v
Out[23]: 
array([ 0.144,  1.237,  0.458,  0.855,  0.304,  0.265,  0.244,  0.234,
        0.153,  0.145,  0.138,  0.464,  0.228,  0.398,  0.242,  0.219,
        0.322,  0.185,  0.109])

In [24]: numpy.sqrt((v**2).sum(axis=0))
Out[24]: 1.8745943561208116

In [25]: norm(v)
Out[25]: 1.8745943561208116
Grüße
Gerrit

Re: Betrag von Vektor

Verfasst: Donnerstag 5. August 2010, 14:44
von mzh
norm() is a definitely a nice guy.

Re: Betrag von Vektor

Verfasst: Freitag 6. August 2010, 03:21
von gkuhl
Leider hat ``norm`` (noch) kein ``axis``-Keyword, daher sollte man die alternative Lösung im Kopf behalten, falls man mal ein Vektorfeld normieren will.