使用quiver3D/python绘制三维矢量场

使用quiver3D/python绘制三维矢量场,python,vector,mayavi,Python,Vector,Mayavi,我在用mayavi的函数quiver3d绘制3D向量场时遇到了一些问题。当我在终端中执行程序时,显示如下: Traceback (most recent call last): File "inter3d.py", line 80, in <module> mlab.quiver3d(x,y,z,Bx,By,Bz,scale_factor=1 ,mask_points =5) File "/usr/lib/python2.7/dist-packages/mayavi/

我在用mayavi的函数quiver3d绘制3D向量场时遇到了一些问题。当我在终端中执行程序时,显示如下:

Traceback (most recent call last):
  File "inter3d.py", line 80, in <module>
    mlab.quiver3d(x,y,z,Bx,By,Bz,scale_factor=1 ,mask_points =5)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 34, in the_function
    return pipeline(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 79, in __call__
    output = self.__call_internal__(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 175, in __call_internal__
    g = Pipeline.__call_internal__(self, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 90, in __call_internal__
    self.source = self._source_function(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 991, in vector_scatter
    x, y, z, u, v, w = process_regular_vectors(*args)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 904, in process_regular_vectors
    w.shape == v.shape ), "argument shape are not equal"
AssertionError: argument shape are not equal
在终端:

    Traceback (most recent call last):
  File "test2.py", line 97, in <module>
    mayavi.mlab.quiver3d(x, y, z, u, v, w, line_width=3, scale_factor=1)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 34, in the_function
    return pipeline(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 79, in __call__
    output = self.__call_internal__(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 175, in __call_internal__
    g = Pipeline.__call_internal__(self, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 90, in __call_internal__
    self.source = self._source_function(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 991, in vector_scatter
    x, y, z, u, v, w = process_regular_vectors(*args)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 902, in process_regular_vectors
    u.shape == z.shape and
AttributeError: 'function' object has no attribute 'shape'
回溯(最近一次呼叫最后一次):
文件“test2.py”,第97行,在
mayavi.mlab.quiver3d(x,y,z,u,v,w,线宽=3,比例因数=1)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/helper_functions.py”,第34行,在_函数中
回流管道(*args,**kwargs)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/helper\u functions.py”,第79行,在调用中__
输出=self.\uuuuuu调用\uuuuuuuuu内部(*参数,**kwargs)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/helper\u functions.py”,第175行,在内部调用中__
g=管道。调用内部(self,*args,**kwargs)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/helper\u functions.py”,第90行,在内部调用中__
self.source=self.\u source\u函数(*args,**kwargs)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/sources.py”,第991行,矢量散点
x、 y,z,u,v,w=过程正则向量(*args)
文件“/usr/lib/python2.7/dist packages/mayavi/tools/sources.py”,第902行,进程中的常规向量
u、 形状==z。形状和
AttributeError:“函数”对象没有属性“形状”

我想你的问题是u,v和w的形状,你试过读u,v,w的形状吗?它们需要与x,y,z的大小完全相同

# -*- coding: utf-8 -*-

from numpy import *
from math import *
import numpy as np
import mayavi.mlab as mlab 
from pylab import *
import pylab as pl

#valeur initiale
a=6.371*10**6
b0=31200*10**-9
Bp=0.
nb_x=30
nb_y=30
nb_z=30
Lx=10*10**7
Ly=10*10**7
Lz=10*10**7
dx=Lx/nb_x
dy=Ly/nb_y
dz=Lz/nb_z
N = int(nb_x*nb_y*nb_z)
x=0.
y=0.
z=0.
Bx=0.
By=0.
Bz=0.
#xp=12*10**6
#yp=12*10**6
l=0
i=0
j=0
u=0
teta=0.
phi=0.
mu=4*pi*10**-7
k=mu/4*pi
M=8*10**22
#print N, dx, dy
########################
def u(x,y,z,k,M):
    r=sqrt(x**2+y**2+z**2)
    print r
    if r>=6.37*10**2:
        if y >= 0:
            teta=acos(x/r)
        else:
            teta=2*pi-acos(x/r)
        phi=z/r
        Br=2*k*M*cos(teta)/(r**3)
        Bteta=k*M*sin(teta)/(r**3)
        Bx=-cos(teta)*(Br*sin(phi)+Bteta*cos(phi))
        #B[i,j]=sqrt(Bx[i,j]**2+By[i,j]**2)#calcul de la norme du champs
    else:
        Bx=0.

    return Bx
def v(x,y,z,k,M):
    r=sqrt(x**2+y**2+z**2)
    if r>=6.37*10**2:
        if y >= 0:
            teta=acos(x/r)
        else:
            teta=2*pi-acos(x/r)
        phi=z/r
        Br=2*k*M*cos(teta)/(r**3)
        Bteta=k*M*sin(teta)/(r**3)
        By=sin(teta)*(Bteta*cos(phi)+Br*sin(phi))

        #B[i,j]=sqrt(Bx[i,j]**2+By[i,j]**2)#calcul de la norme du champs
    else:
        By=0.

    return By
def w(x,y,z,k,M):
    r=sqrt(x**2+y**2+z**2)
    if r>=6.37*10**2:
        if y >= 0:
            teta=acos(x/r)
        else:
            teta=2*pi-acos(x/r)
        phi=z/r
        Br=2*k*M*cos(teta)/(r**3)
        Bteta=k*M*sin(teta)/(r**3)

        Bz=cos(phi)*Br-sin(teta)*Bteta
        #B[i,j]=sqrt(Bx[i,j]**2+By[i,j]**2)#calcul de la norme du champs
    else:

        Bz=0.
    return Bz
#####################
x, y, z = np.mgrid[-5*10**7:5*10**7:400000, -5*10**7:5*10**7:400000, -5*10**7:5*10**7:400000]
mayavi.mlab.quiver3d(x, y, z, u, v, w, line_width=3, scale_factor=1)
    Traceback (most recent call last):
  File "test2.py", line 97, in <module>
    mayavi.mlab.quiver3d(x, y, z, u, v, w, line_width=3, scale_factor=1)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 34, in the_function
    return pipeline(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 79, in __call__
    output = self.__call_internal__(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 175, in __call_internal__
    g = Pipeline.__call_internal__(self, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 90, in __call_internal__
    self.source = self._source_function(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 991, in vector_scatter
    x, y, z, u, v, w = process_regular_vectors(*args)
  File "/usr/lib/python2.7/dist-packages/mayavi/tools/sources.py", line 902, in process_regular_vectors
    u.shape == z.shape and
AttributeError: 'function' object has no attribute 'shape'