【问题标题】:How do I find minimum value for following problem in Python?如何在 Python 中找到以下问题的最小值?
【发布时间】:2021-02-25 04:58:18
【问题描述】:

这里我有一个列表如下:

[0.40540540540540543, 0.40540540540540543, 0.08108108108108109, 0.40540540540540543, 0.40540540540540543, 0.43243243243243246, 0.43243243243243246, 0.40540540540540543, 0.40540540540540543]

从上面的列表中我们可以观察到大多数值都在 0.4 到 0.5 的范围内。我想编写一段代码来计算列表中大多数数字的范围(位于该范围内)并找到该范围内的最小值。

【问题讨论】:

  • min 内置函数?
  • 什么,确切地,您所说的“接近 0.4”是什么意思?
  • 假设 0.05 或更少的差异被认为是“接近”:min([x for x in mylist if abs(x - 0.4) < 0.05])
  • @user2357112supportsMonica "near 0.4" 只是我的观察。从给定的列表中,我们可以观察到列表中的大多数值都在 0.4 到 0.5 的范围内。在这里,我只知道我有一个列表,而且我也知道列表中的大多数元素都在一定范围内。所以我必须找出这样一个区间为 0.1 的范围,然后从这个范围中找出最小值。很抱歉让您感到困惑。
  • @JohnGordon 这里我不知道值'0.4'。这是我观察到的。我想找出列表中大多数值的范围(在这里我们可以观察到它们中的大多数都在 0.4 到 0.5 的范围内),范围的间隔是 0.1。因此,一旦获得范围,我只需要在范围下限附近找到最接近的数字。

标签: python python-3.x list statistics


【解决方案1】:

您应该通过计算 z 值来定义异常值的含义(有关详细信息,请参阅 https://www.statology.org/remove-outliers-python/

import numpy as np
import scipy.stats as stats
A = np.array([0.40540540540540543, 0.40540540540540543, 0.08108108108108109, 0.40540540540540543,
              0.40540540540540543, 0.43243243243243246, 0.43243243243243246, 0.40540540540540543,
              0.40540540540540543])
z = np.abs(stats.zscore(A))
A_clean = np.array([A[i] for i in range(len(z)) if z[i] < 2])

通常我们将异常值定义为z &gt; 3z &lt; -3,但对于您的示例,z &lt; 2 可以工作。

【讨论】:

  • 你不需要使用 NumPy 来达到最低限度。 Python 已经有一个 min 内置函数。此外,这并不能解释问题模糊的“接近 0.4”限定词。
  • (如果你已经在使用 NumPy,你应该使用 numpy.minnumpy.ndarray.min 方法而不是内置的 min,但如果你在没有 NumPy 的情况下工作,常规min 内置是合适的。)
  • 对不起,这不是我想知道的。您可以查看问题的描述和 cmets 以了解问题。
  • @Atharva 我会先对列表进行排序。在那之后,异常值应该会更加明显。
  • @Teera 是的,我偶然发现了一篇关于异常值的文章,我基本上拒绝了异常值。如果您愿意,您可以编辑您的答案,我会将异常值解决方案标记为正确。 非常感谢
猜你喜欢
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2022-10-17
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多