Numpy网格的矢量

时间:2018-05-03 04:04:05

标签: python arrays numpy

我正在尝试设置一些代码,用于对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,结果大致相同。

任何帮助我指向正确方向的人都非常感激。

1 个答案:

答案 0 :(得分:1)

np.stackaxis关键字一起使用

def vectorf(x, y, z):
    return np.stack((y, x, z), axis = -1)