gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:23:57 25 4
gpt4 key购买 nike

我正在尝试提取图中虚线、点划线和点划线上方的值的数量。

enter image description here

我总能看到超出这些曲线范围的点数,但我不想冒此方法出现任何错误的风险。

首先,这些曲线由我在代码 Escape_Velocity 中调用的质量变量和距离变量定义。这是我制作的类(class)简介的一部分。

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 值(value)。

我图上的值来 self 对数据集的分析,我们可以调用RadVel 是 y 轴值“Radial Velocity”,Dist 是 x 轴值“Galactocentric Distance”。

关键部分是这两个元素数组具有相同的维度,并且它们可以相互索引。例如,第 20 个索引值 RadVel 对应于 Dist 的第 20 个索引值。


所以我的计划是

  1. 选择一个任意值的质量
  2. Dist中取出一个元素>
  3. 将该值提供给 Escape_Velocity
  4. 如果 RadVel 值(对应于馈送到 Escape_Velocity 的元素)大于 Escape_Velocity 值,则计数。
  5. 如果 Escape_Velocity 大于相应的 RadVel 值,则不计入。

    import numpy as np
    import NFW_Profile as NFW

    h0 = 0.704
    NFWc12 = NFW.Profile(c=12.5, z=0.0, h=h0)


    def UnboundSubhalos(mass, Dist):
    Vesc = NFWc12.Escape_Velocity(mass, Dist)

    PosValues = [i for i in RadVel if i => Vesc.all()]
    NegValues = [i for i in RadVel if i <= -Vesc.all()]

    return len(PosValues) + len(NegValues)

最佳答案

据我所知,您想找出由您称为 Escape_Velocity 的非线性函数定义的区域之外的红点的数量,并且红点具有 x 位置和分别存储在数组 DistRedVal 中的 y 位置已排序,因此红点的位置 (x,y)=(Dist[ n], RedVel[n]).此外,它看起来像(并且你对 UnboundSubhalos 的定义表明了这一点)由 Escape_Velocity 定义的虚线围绕 RedVel = 0 对称,即你其实想求出RedVel绝对值大于Escape_Velocity的红点个数。

在这种情况下,您可以简单地执行以下操作:假设 Escape_Velocity 是一个可以将数组传递给的函数,您可以为数组的每个元素找到 Escape_Velocity Dist 并将其存储在数组 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()

关于Python - 在曲线函数上方返回数组中的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791934/

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