gpt4 book ai didi

python - 如何绘制条件为 (r < 1.5*rs) 的数组?

转载 作者:行者123 更新时间:2023-12-01 00:44:32 26 4
gpt4 key购买 nike

我正在对绕黑洞运行的光子进行编码。当光子直接进入黑洞时,由于被零除,其轨迹非常奇怪。我想忽略 r < 1.5*rs 数组中的光子,但我不知道如何实现

我尝试过使用 while True 和 if,但没有成功

h0=[t0, r2, theta, phi2, pt2, pr2, ptheta, pphi2] 

T = np.linspace(0, 1000, 9000)

zz=odeint(func, h0, T, args=(rs,))

r22 = zz[:, 1]
theta22 = zz[:, 2]
phi22 = zz[:, 3]
pt22 = zz[:, 4]
pr22 = zz[:, 5]
pphi22 = zz[:, 7]

def sph2cart(r, phi, theta):
X = r * np.cos(phi) * np.sin(theta)
Y = r * np.sin(phi) * np.sin(theta)
Z = r * np.cos(theta)
return(X, Y, Z)

X2, Y2, Z2 = sph2cart(r22, phi22, theta22)

plt.plot(X2, Y2, Z2, 'g')

我认为你真的不需要代码来帮助我,但是有人知道如何绘制半径 r < 1.5*rs 的 X2、Y2、Z2 (rs 在代码中定义)吗?

最佳答案

Numpy 内置了运行良好的掩码

r=np.arange(20)
r_mask = np.ma.masked_where(r < 10 , r)

所以,因为你只想在 r<1.5*rs 时生成 X、Y 和 Z 值(我认为你在某一点上以相反的方式说过,但在任何情况下你只需要翻转符号),您的代码可能如下所示

import numpy as np
h0=[t0, r2, theta, phi2, pt2, pr2, ptheta, pphi2]

T = np.linspace(0, 1000, 9000)

zz=odeint(func, h0, T, args=(rs,))

r22 = zz[:, 1]
theta22 = zz[:, 2]
phi22 = zz[:, 3]
pt22 = zz[:, 4]
pr22 = zz[:, 5]
pphi22 = zz[:, 7]

def sph2cart(r, phi, theta):
X = r * np.cos(phi) * np.sin(theta)
Y = r * np.sin(phi) * np.sin(theta)
Z = r * np.cos(theta)
return(X, Y, Z)

r22_masked = np.ma.masked_where(r22 > 1.5*rs , r22)

X2, Y2, Z2 = sph2cart(r22_masked, phi22, theta22)

这只会为 r22 的未屏蔽值生成 X2、Y2 和 Z2 值(即 r22 小于 1.5*rs)

关于python - 如何绘制条件为 (r < 1.5*rs) 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57089322/

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