我正在尝试设置一些代码,用于对3D矢量场(如电场或磁场)进行数值计算。我无法以我想要的方式设置网格。 考虑一下这个程序:
import numpy as np
X1, Y1, Z1 = np.meshgrid(np.linspace(-10,10,10),np.linspace(-10,10,10),np.linspace(-10,10,10))
def scalarf(x,y,z):
return x**2 + y**2 + z**2
def vectorf(x,y,z):
return np.array([y,x,z])
def afunc(p,v):
return np.cross(p,v)
V = scalarf(X1,Y1,Z1)
F = vectorf(X1,Y1,Z1)
# This line clearly not working
F2 = afunc(F,np.array([1,0,0]))
print (V.shape)
print (F.shape)
对于V,其输出给出(10,10,10),对于F.给出(3,10,10,10)。因此,V是标量值的10x10x10阵列。但对于F我想要的是一个10x10x10阵列的3个元素阵列代表数学3D矢量。相反,我有一个3元素数组,其中包含一个10x10x10数组作为其每个元素。所以我猜我想要一个(10,10,10,3)形状。最终我希望能够(例如)在上面运行像afun这样的函数。这里的意图是F2现在是一个新的10x10x10向量数组。它刚刚失败,因为我猜它试图在函数调用中使用10x10x10数组和固定的3d矢量执行交叉产品。
我是否以正确的方式远程进行此操作?有没有另一种方法来创建矢量的3D数组?顺便说一下,我也尝试过使用mgrids,结果大致相同。
任何帮助我指向正确方向的人都非常感激。
答案 0 :(得分:1)
将np.stack
与axis
关键字一起使用
def vectorf(x, y, z):
return np.stack((y, x, z), axis = -1)