Seite 1 von 1

shape mismatch beim benutzen von mgrird

Verfasst: Sonntag 15. August 2010, 12:16
von Zero.One
Hallo, ich habe eine Funktion (Test), die mit Vektoren arbeitet. Die Rückgabe soll dann geplottet werden. Leider bekomme ich dann folgenen Error, wenn ich die eingabe mit einer Konstanten vermische:

Code: Alles auswählen

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    u, v, w = test(pos, a)
  File "test.py", line 6, in test
    a = const-pos
ValueError: shape mismatch: objects cannot be broadcast to a single shape
wenn ich das vermischen mit einer Konstanten weglasse dann funktioniert das Plotten.
Was mach ich falsch , warum ist das falsch und was ist zu beachten wenn ich mit mgrid etc. arbeite.


Mfg Zero.One

Hier der Code:

Code: Alles auswählen

import math
from numpy import *
from enthought.mayavi.mlab import *

def test(const,pos):
	a = const-pos
	return a[0], a[1], a[2]

def test0(a):
	return a[0], a[1], a[2]

pos = array([1.1, 1, 0])
start = array([1,1,1])

print test(start, pos)

a = mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u, v, w = test(pos, a)

quiver3d(u, v, w)
outline()
show()

Re: shape mismatch beim benutzen von mgrird

Verfasst: Sonntag 15. August 2010, 12:55
von BlackJack
@Zero.One: Schau Dir doch mal `pos` und `a` an. Was sollte denn da herauskommen wenn Du von einem flachen Array mit drei Werten ein mehrfach verschachteltes mit insgesamt 24000 Werten "abziehst"!?

Re: shape mismatch beim benutzen von mgrird

Verfasst: Sonntag 15. August 2010, 13:04
von Zero.One
Danke!, mgrid generiert also eine Liste mit allen möglichen Werten, die geplottet werden sollen. Ich möchte ja dass jeder einzelne Wert mit der Konstanten operriert. Müsste ich dann aus den Konstanten auch so eine Liste machen? oder gibt es eine Plotfunktion die die Werte einzelnt in die Funktion einsetzt bzw. was wäre denn so die standart Lösung für dieses Problem?

Mfg Zero.One

Re: shape mismatch beim benutzen von mgrird

Verfasst: Sonntag 15. August 2010, 14:52
von BlackJack
`mgrid()` erzeugt keine Liste sondern ein verschacheltes Array. In diesem Fall mit den Dimensionen 3, 20, 20, 20.

Re: shape mismatch beim benutzen von mgrird

Verfasst: Sonntag 15. August 2010, 18:00
von gkuhl
Ich würde hier auf die erste Dimension verzichten:

Code: Alles auswählen

from itertools import izip
import numpy as np
x,y,z = np.mgrid[0:1:20j,0:1:20j,0:1:20j]
u,v,w = (c-a for a,c in izip([x, y, z], [1.1, 1.0, 0.0]))
*-Importe sollte man übrigens vermeiden, da man leicht einen Namen überschreibt:

Code: Alles auswählen

In [1]: from random import *

In [2]: random()
Out[2]: 0.076215584769962264

In [3]: from numpy import *

In [4]: random()
---------------------------------------------------------------------------
TypeError: 'module' object is not callable
Grüße
Gerrit