【问题标题】:How to plot array with condition (r < 1.5*rs)?如何绘制条件数组(r < 1.5 * rs)?
【发布时间】:2019-07-19 21:08:09
【问题描述】:

我正在编码绕黑洞运行的光子。当光子直接进入黑洞时,由于被零除,轨迹真的很奇怪。我想忽略我阵列中 r

我尝试过使用 while True ,但它没有用

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

【问题讨论】:

  • 我回答你的问题了吗?还有什么问题需要澄清吗?
  • @Novice 感谢您的回答!不幸的是,我真的不知道在哪里写它..我真的只是一个初学者,所以如果你能指定具体写什么,我将非常感激¿谢谢;)
  • 好的,我将编辑我的答案以阐明我认为您需要什么

标签: python matplotlib plot


【解决方案1】:

Numpy 内置了很好用的掩码

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

所以,由于您只想在 r

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

【讨论】:

  • 谢谢!不幸的是,它仍然无法正常工作,我不明白。无论如何,祝你有美好的一天!
  • 如果你提供了一个示例数据集,我可以自己测试并提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2021-05-31
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多