首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -返回曲线函数上方数组中的元素数

Python -返回曲线函数上方数组中的元素数
EN

Stack Overflow用户
提问于 2017-03-14 16:50:34
回答 1查看 185关注 0票数 3

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

我总是可以关注超过这些曲线范围的点数,但我不想在这种方法中冒任何错误。

首先,这些曲线由我在代码Escape_Velocity中调用的质量变量和距离变量定义。这是我所做的课程简介的一部分。

代码语言:javascript
复制
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个索引值。

所以我的计划是

  1. 选择Mass的任意值
  2. Dist中获取一个元素
  3. 将该值提供给Escape_Velocity
  4. 如果RadVel值(对应于输入给Escape_Velocity的元素)大于Escape_Velocity值,则计算值。
  5. 如果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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 17:45:03

据我所知,你想要找到红色点的数量,它在由非线性函数Escape_Velocity定义的区域之外,红色点有x位置和y位置,分别存储在数组DistRedVal中,这样红色点就有一个位置(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)给出所需的外部点数。

以下代码的工作方式与所描述的类似:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42791934

复制
相关文章

相似问题

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