You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python中笛卡尔坐标系下的2D高斯分布转换为极坐标形式?

2D笛卡尔高斯分布转极坐标分布实现方案

要实现你需要的极坐标高斯分布效果,有两种可行的实现路径:

方案1:直接在极坐标网格上生成高斯分布(推荐)

这种方法不需要处理笛卡尔坐标到极坐标的数值映射,直接创建极坐标网格后转换为笛卡尔坐标计算高斯值,效率和精度更高,代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 原高斯参数
max_val, x_mean, y_mean, sig_x, sig_y, alpha = [1, 0, 0, 0.01, 0.01, 0]

# 生成极坐标网格
rho = np.linspace(0, 0.5, 100)
phi = np.linspace(0, 2*np.pi, 360)
rho_grid, phi_grid = np.meshgrid(rho, phi)

# 极坐标转笛卡尔坐标用于计算高斯值
x_grid = rho_grid * np.cos(phi_grid)
y_grid = rho_grid * np.sin(phi_grid)

# 计算高斯分布值
n_grid_polar = max_val * np.exp(-((x_grid - x_mean) ** 2 / (2 * sig_x) + (y_grid - y_mean) ** 2 / (2 * sig_y)))

# 极坐标下绘图
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111, projection='polar')
ax.set_title('极坐标高斯分布', pad=20)
contour = ax.contourf(phi_grid, rho_grid, n_grid_polar, cmap='seismic', vmin=0, vmax=1)
plt.colorbar(contour)
plt.show()

方案2:已有笛卡尔网格n_grid插值映射到极坐标

如果你必须使用已经生成好的笛卡尔网格数据n_grid,可以通过插值方法将数值映射到极坐标网格,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# ------------ 原笛卡尔网格生成部分 ------------
max_val, x_mean, y_mean, sig_x, sig_y, alpha = [1, 0, 0, 0.01, 0.01, 0]
xline = np.arange(-0.5, 0.5, 0.001)
yline = np.arange(-0.5, 0.5, 0.001)
x_grid, y_grid = np.meshgrid(xline, yline)  
n_grid = max_val * np.exp(-((x_grid - x_mean) ** 2 / (2 * sig_x) + (y_grid - y_mean) ** 2 / (2 * sig_y)))

# ------------ 笛卡尔转极坐标插值部分 ------------
# 生成目标极坐标网格
rho = np.linspace(0, 0.5, 100)
phi = np.linspace(0, 2*np.pi, 360)
rho_grid, phi_grid = np.meshgrid(rho, phi)
# 极坐标网格转笛卡尔坐标作为插值目标点
x_target = rho_grid * np.cos(phi_grid)
y_target = rho_grid * np.sin(phi_grid)

# 把原笛卡尔网格的坐标和数值拉平为一维数组,用于插值
points = np.vstack((x_grid.flatten(), y_grid.flatten())).T
values = n_grid.flatten()

# 线性插值得到极坐标网格对应的数值
n_grid_polar = griddata(points, values, (x_target, y_target), method='linear')

# 极坐标下绘图
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111, projection='polar')
ax.set_title('插值得到的极坐标高斯分布', pad=20)
contour = ax.contourf(phi_grid, rho_grid, n_grid_polar, cmap='seismic', vmin=0, vmax=1)
plt.colorbar(contour)
plt.show()

注意事项

  • 你原来的绘图代码设置了vmin=-3但高斯分布最小值为0,会导致色阶显示异常,上面的代码已经调整为符合高斯数值范围的vmin=0
  • 如果你的高斯中心不在原点,两种方案都可以正常适配,只需要修改x_mean和y_mean参数即可

内容的提问来源于stack exchange,提问作者Desperate Morty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:48:01