【问题标题】:How to calculate the radius of a circle so that 95 % of the dots are inside of it如何计算圆的半径,使 95% 的点在圆内
【发布时间】:2021-11-09 18:33:00
【问题描述】:

我测量了 100 个点并计算了 x 和 y 方向的标准偏差。然后,我在图表中绘制了 100 个点中的每一个,现在我想圈出其中 95% 的点。

我的想法是我可以使用标准偏差来计算半径,但是使用具有相似标准偏差的随机数据进行的测试证明这不起作用。

我已经使用 Protagoras 定理以及 numpy 中的标准差函数进行了测试。

    cal_x_mean = 0
    cal_x_std = 0.5286
    cal_z_mean = 0
    cal_z_std = 0.4158
    
    cal_x_values = stats.truncnorm(-1, 1, loc=cal_x_mean, scale=cal_x_std)
    cal_z_values = stats.truncnorm(-1, 1, loc=cal_z_mean, scale=cal_z_std)

    cal_x = cal_x_values.rvs(100)
    cal_y = cal_z_values.rvs(100)

    # cal_r = 2*np.std([cal_x, cal_y])              # numpy
    cal_r = math.hypot(cal_x_std, cal_z_std)        # Protagoras

    print(f'Radius for calibrated {cal_r}')

    fig, ax = plt.subplots(1)
    plt.plot(0, 0, 'o', color='red')
    plt.plot(cal_x, cal_y, 'o', color='black')
    Drawing_uncolored_circle = plt.Circle((0, 0), cal_r, fill=False)

    ax.set_aspect(1)
    ax.add_artist(Drawing_uncolored_circle)
    plt.xlim(-1, 1)
    plt.ylim(-1, 1)
    plt.title(str("Calibrated"))
    plt.grid()
    plt.ylabel('Z (mm)')
    plt.xlabel('X (mm)')

stackoverflow 中的大神们对如何解决这个问题有什么建议吗?

乌龟

【问题讨论】:

  • 请注意,您应该提供minimal reproducible example,其中包括提供一段我们可以复制、粘贴和运行的代码。无论如何,只是获得包含 95% 值的无穷大圆之一的一般想法:选择 (x_mean, y_mean) 或 (0, 0),它们应该是接近的,作为中心,计算每个点到中心,对它们进行排序,从 100 中取第 95 位,就得到了你的半径。

标签: python geometry probability scipy.stats


【解决方案1】:

假设您想要一个准确的答案,您可以重新考虑您的问题,即查找值列表的第 95 个百分位数,其中每个值都是点到原点的距离。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
相关资源
最近更新 更多