首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python上的映射字段

Python上的映射字段
EN

Stack Overflow用户
提问于 2016-06-26 11:07:34
回答 1查看 127关注 0票数 1

我试图重新映射Python中的某个字段,但不确定如何实现。这个话题是关于引力透镜。所以我现在做的是获得一个偏转场,它告诉你光是如何围绕质量弯曲的。偏转场图

用这个,我得到了一个叫做放大图的东西,它显示了能产生最亮图像的区域。颜色越红,图像越亮。放大图现在,我想从放大图中减去偏转场,以获得另一个平面上的映射。

我不知道该怎么做,因为我的偏转场是一个2d矢量,所以我把deflection_x和deflection_y作为两个数组。同时,我的放大率只是分配给2d X-Y网格中每个网格点的值。另一种重新表述我想做的事情的方法是如下所示。让放大倍数是我。

所以现在我有我(x,y)。我想得到I(x - (deflection_x),y -(deflection_y))。基本上,它取橙色的曲线,使它在新的x和y位置上变成另一条曲线,但大小相同。我给出了下面的代码:

代码语言:javascript
复制
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并绘制出来没有什么帮助。不应该减去放大率的值,而仅仅是放大的位置。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-26 14:40:00

算出来了,只需直接从np.meshgrid中减去,然后重新绘制新的坐标系。我想我只是被所有的组件搞糊涂了。谢谢你的帮忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38037881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档