【发布时间】:2020-02-23 18:14:30
【问题描述】:
我将尝试在此处解释我的问题,而不会过多地介绍实际应用程序,以便我们能够以代码为基础。基本上,我需要对向量场进行操作。我的第一步是将字段生成为
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).
不幸的是,这种情况需要如此困难的操作。我需要使用类似于
的公式 其中向量 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)
【问题讨论】:
-
您能否发布一些更具代表性的公式(
x、y和z现在没有出现在其中)以及一些示例数据和所需的输出? -
使用
X, Y, Z = np.meshgrid(x, y, z),我感觉A = np.array([X, Y, Z ])给了你一个位置向量数组。这可以直接馈送到np.cross,您可以使用axisa或axisb指定坐标沿哪个轴。 -
我没有完全听懂你的问题。
v是与网格x,y,z定义的体积相关联的固定矢量场吗?您是否正在尝试计算B(x,y,z)? -
@Liris,这是我最初的直觉,但它给出了我在上面添加的错误。我的猜测是这会产生一个数组数组,numpy 假设它类似于一个无法跨越的 3x50 矩阵。
-
@QuangHoang,是的,在这种情况下,
v是等式中的向量 dl,我将其作为来自程序不同部分的类的 numpy 数组。真正的问题是构建 r 向量,因为我需要创建一个向量网格网格,从点(x,y,z)指向网格网格中的任何给定点。
标签: python arrays numpy matplotlib