我试图提取在我的图中虚线、虚线和虚线上的值的数目。

我总是可以关注超过这些曲线范围的点数,但我不想在这种方法中冒任何错误。
首先,这些曲线由我在代码Escape_Velocity中调用的质量变量和距离变量定义。这是我所做的课程简介的一部分。
import numpy as np
import NFW_Profile as NFW
h0 = 0.704
NFWc12 = NFW.Profile(c=12.5, z=0.0, h=h0)
nfwEsc = NFWc12.Escape_Velocity(Mass, Radius)在我的绘图中,这些曲线是基于这个函数的,其中我选择一个任意的Mass值,Radius被赋予一个np.linspace值。
图中的值来自数据集的分析,我们可以将RadVel称为y轴值“径向速度”,Dist称为x轴值“以银河为中心的距离”。
关键的部分是,这两个元素数组具有相同的维度,它们可以相互索引。例如,第20个索引值RadVel对应于Dist的第20个索引值。
所以我的计划是
Mass的任意值Dist中获取一个元素Escape_VelocityRadVel值(对应于输入给Escape_Velocity的元素)大于Escape_Velocity值,则计算值。Escape_Velocity大于相应的RadVel值,则不计算。
numpy作为np导入NFW_Profile as NFW h0 = 0.704 NFWc12 = NFW.Profile(c=12.5,z=0.0,h=h0) def UnboundSubhalos(质量,Dist):Vesc =NFWc12.Escape_Velocity(质量,Dist) PosValues =i for i in RadVel如果i => Vesc.all() NegValues =i in RadVel如果I <= -Vesc.all()返回len(<=)+len(RadVel)发布于 2017-03-14 17:45:03
据我所知,你想要找到红色点的数量,它在由非线性函数Escape_Velocity定义的区域之外,红色点有x位置和y位置,分别存储在数组Dist和RedVal中,这样红色点就有一个位置(x,y)=(Dist[n], RedVel[n])。而且,看起来( UnboundSubhalos的定义表明) Escape_Velocity定义的虚线在RedVel = 0周围是对称的,也就是说,您实际上希望找到绝对值RedVel大于Escape_Velocity的红色点的数量。
在本例中,您可以简单地执行以下操作:假设Escape_Velocity是可以传递数组的函数,则可以为数组Dist的每个元素找到Escape_Velocity,并将其存储在数组esc_vel = Escape_Velocity(Mass, Dist)中。否则,您必须通过对Dist元素的循环来计算这些值。从您的代码中,我可以假设Escape_Velocity给出了一个正值,即正RedVal值处的虚线。然后,数组outside_dots = np.abs(RedVel) >= esc_vel对被虚线包围的区域外的每个点都包含True,对于内部的每个点包含False。然后np.sum(outside_dots)给出所需的外部点数。
以下代码的工作方式与所描述的类似:
import numpy as np
import matplotlib.pyplot as plt
number_dots = 100
x = np.random.random(number_dots) # random numbers in the range [0, 1]
y = (np.random.random(number_dots) - 0.5) * 2 # random numbers in the range [-1, 1]
curved_function = lambda z: 1 - np.sqrt(z)/3
plt.plot(x, y, 'ro')
plt.xlabel('x')
plt.ylabel('y')
def count_dots_outside(x, y):
outside_dots = np.abs(y) > curved_function(x)
return np.sum(outside_dots)
plt.title('Number of dots outside the curved function: '+str(count_dots_outside(x,y)))
xx = np.linspace(0,1,100)
plt.plot(xx, curved_function(xx), 'black', linestyle='dashed')
plt.plot(xx, -curved_function(xx), 'black', linestyle='dashed')
plt.show()https://stackoverflow.com/questions/42791934
复制相似问题