【发布时间】:2021-09-19 07:11:18
【问题描述】:
所以我是 Python 新手,我想将包含笛卡尔坐标的 3D 数组转换为球坐标。我已经完成了计算转换的这个函数:
def cart2sph(x, y, z):
xy = np.sqrt(x**2 + y**2) # sqrt(x² + y²)
x_2 = x**2
y_2 = y**2
z_2 = z**2
r = np.sqrt(x_2 + y_2 + z_2) # r = sqrt(x² + y² + z²)
theta = np.arctan2(y, x)
phi = np.arctan2(xy, z)
return r, theta, phi
但是,如果我有一个随机数组(N,N,N),比如
N = 3
array = np.random.rand(N, N, N).astype(dtype=np.float16)
并将 x、y 和 z 坐标传递给我的函数以将笛卡尔坐标转换为球坐标
x = np.asarray(array_np)[:,0].astype(dtype=np.float16)
y = np.asarray(array_np)[:,1].astype(dtype=np.float16)
z = np.asarray(array_np)[:,2].astype(dtype=np.float16)
sphere_coord = cart2sph(x,y,z)
我不断收到错误的转换结果。我尝试了不同的方法,但仍然无法弄清楚我做错了什么。
【问题讨论】:
-
我不确定
N, N, N与x, y, z的关系如何。我希望有一个N, 3或3, N坐标数组,或者一个定义三个轴的网格 -
请发布一个连贯的minimal reproducible example 并展示您的期望与即将发布的内容
-
我认为您的数据生成有点偏离。你想要一个包含 N 个点的数组,每个点都有三个坐标 x、y 和 z。因此,您的数组应该具有形状 (N, 3),因为您正在使用列来区分您发布的代码中的变量。顺便说一句,不要担心否决票。有些人固守规则,但在合理时却无法推理。您的代码中的错误很明显,您在问题中付出的努力也是如此。
-
我现在明白了,@rocksNwaves!非常感谢您的反馈!
标签: python numpy multidimensional-array cartesian-coordinates spherical-coordinate