gpt4 book ai didi

python - Python 上的映射字段

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

我正在尝试重新映射 Python 中的某个字段,但不确定如何进行。主题是关于引力透镜。所以我到目前为止所做的就是获得一个偏转场,它告诉你光是如何围绕质量弯曲的。 Deflection Field Map

使用它,我获得了一种称为放大图的东西,它向您显示了会产生最亮图像的区域。颜色越红,图像越亮。 Magnification Map现在,我想从放大图中减去偏转场,以获得不同平面中的另一个映射。

我不知道如何解决这个问题,因为我的偏转场是一个二维向量,所以我有 deflection_x 和 deflection_y 作为 2 个数组。同时,我的放大倍率只是分配给 2d X-Y 网格中每个网格点的值。另一种重新表述我正在尝试做的事情的方法如下。设放大倍数为I。

所以现在我有 I(x,y)。我想获得 I(x - (deflection_x), y -(deflection_y))。基本上,它采用橙色曲线并将其变成新的 x 和 y 位置但具有相同幅度的另一条曲线。我在下面给出了我当前的代码:

x = np.linspace(-50,50,100)
y = np.linspace(-50,50,100)
X, Y = np.meshgrid(x,y)
zeta_a = (-3,0)
zeta_b = (3,0)
def get_dist_squared(x_array, y_array):
return x_array**2 + y_array**2
M_a= 150
M_b= 150
G = 1
c = 1
zeta_min_zeta_a_x = X - zeta_a[0]
zeta_min_zeta_a_y = Y - zeta_a[1]
zeta_min_zeta_b_x = X - zeta_b[0]
zeta_min_zeta_b_y = Y - zeta_b[1]
dist_zeta_min_zeta_a = get_dist_squared(zeta_min_zeta_a_x,zeta_min_zeta_a_y)
dist_zeta_min_zeta_b = get_dist_squared(zeta_min_zeta_b_x,zeta_min_zeta_b_y)
alpha_x = M_a * zeta_min_zeta_a_x / dist_zeta_min_zeta_a
alpha_x += M_b * zeta_min_zeta_b_x / dist_zeta_min_zeta_b
alpha_x *= 4 * G / (c**2)
alpha_y = M_a * zeta_min_zeta_a_y / dist_zeta_min_zeta_a
alpha_y += M_b * zeta_min_zeta_b_y / dist_zeta_min_zeta_b
alpha_y *= 4 * G / (c**2)
alpha_x_y, alpha_x_x = np.gradient(alpha_x,edge_order=1)
alpha_y_y, alpha_y_x = np.gradient(alpha_y,edge_order=1)
det_A = 1 - alpha_y_y - alpha_x_x + (alpha_x_x)*(alpha_y_y) - (alpha_x_y)*(alpha_y_x)
abs = np.absolute(det_A)
I = abs**(-1.)

放大倍数由I给出。不用担心代码的计算部分,这一步之后我想要的是从I中减去alpha_x和alpha_y。alpha_x和alpha_y是x轴和y轴的偏转。

根据我的尝试,简单地执行 I - alpha_x 和 I - alpha_y 并绘制它并没有帮助。应该减去的不是放大倍数的值,而只是放大倍数的位置。

谢谢!我真的很感激任何建议。

最佳答案

弄清楚了,只需直接从 np.meshgrid 中减去,然后相对于新坐标系重新绘制 I 即可。我想我只是因为涉及到所有组件而感到困惑。感谢您的帮助!

关于python - Python 上的映射字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037881/

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