python - 从 Numpy Meshgrid 生成位置向量

标签 python arrays numpy matplotlib

我将尝试在这里解释我的问题,而不会详细介绍实际应用程序,以便我们能够立足于代码。基本上,我需要对向量场进行运算。我的第一步是将字段生成为

x,y,z = np.meshgrid(np.linspace(-5,5,10),np.linspace(-5,5,10),np.linspace(-5,5,10))

请记住,这是一般情况,在程序中,向量场的边界并不完全相同。一般来说,我希望说一些类似于

u,v,w = f(x,y,z) .

不幸的是,这种情况需要更困难的操作。我需要使用类似于的公式

Simplified version of Biot Savart Equation其中向量 r 在程序中定义为 np.array([xgrid-x,ygrid-y,zgrid-z])除以它自己的规范。基本上,这是一个从空间中的每个点指向位置 (x,y,z) 的向量

现在 Numpy 已经使用 np.cross() 实现了叉积函数,但我似乎无法创建我需要的“矢量网格”。 我有一个 lambda 函数,本质上是

xgrid,ygrid,zgrid=np.meshgrid(np.linspace(-5,5,10),np.linspace(-5,5,10),np.linspace(-5,5,10)) B(x,y,z) = lambda x,y,z: np.cross(v,np.array([xgrid-x,ygrid-y,zgrid-z]))

现在数组 v是从另一个类导入的,似乎工作得很好,但是第二个数组 np.array([xgrid-x,ygrid-y,zgrid-z])不是一个正确的形状,因为它是“网格向量”而不是“向量网格”。我的大问题是,我似乎找不到一种方法来格式化网格网格,使np.cross()函数可以使用位置向量。有办法做到这一点吗?

最初我认为我可以做一些事情:

x,y,z = np.meshgrid(np.linspace(-2,2,5),np.linspace(-2,2,5),np.linspace(-2,2,5)) A = np.array([x,y,z]) cross_result = np.cross(np.array(v),A)

但是,这会返回以下错误,我似乎无法规避该错误:

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 1682, in cross raise ValueError(msg) ValueError: incompatible dimensions for cross product (dimension must be 2 or 3)

最佳答案

有一个解决reshape和广播的方法:

A = np.array([x_grid, y_grid, z_grid])
# A.shape == (3,5,5,5)

def B(v, p):
    '''
    v.shape = (3,)
    p.shape = (3,) 
    '''
    shape = A.shape

    Ap = A.reshape(3,-1) - p[:,None]

    return np.cross(v[None,:], Ap.reshape(3,-1).T).reshape(shape)

print(B(v,p).shape)
# (3, 5, 5, 5)

关于python - 从 Numpy Meshgrid 生成位置向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591620/

相关文章:

python - 如何将函数向量映射到函数在 x 处计算的向量

python - 为什么这个垃圾邮件代码可以无限次运行?

python - Selenium 随机超时异常没有任何消息

Javascript数组,解析每个元素将每个元素乘以 'x'

javascript - 将对象数组中的特定值转换为小写

python - 查找元素改变值的索引 numpy

python - 获取 Numpy 数组的索引

python - 使用matplotlib时对图的控制

python - 日期计算(TypeError : unsupported operand type(s) for -: 'str' and 'str' )

c++ - 查找数组的最低元素