gpt4 book ai didi

python - 从 Numpy Meshgrid 生成位置向量

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:32 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com