Betrag von Vektor

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

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.
[url=http://www.proandkon.com]proandkon.com[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bis jemand eine numpy-Loesung hat:

Code: Alles auswählen

math.sqrt(sum(i*i for i in a))
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
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

norm() is a definitely a nice guy.
[url=http://www.proandkon.com]proandkon.com[/url]
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Leider hat ``norm`` (noch) kein ``axis``-Keyword, daher sollte man die alternative Lösung im Kopf behalten, falls man mal ein Vektorfeld normieren will.
Antworten