首页 > 解决方案 > 我可以在 Python 3.9 中使用带有浮点值和比较器的 Enum 并且仍然利用 numpy 操作的效率吗?

问题描述

对于 Python 3.9 项目,我们希望使用Enums,因为我们按照下面的示例对许多属性进行了分箱。不幸的是,这些 bin 对应于实数,并且将用于大型公式,因此IntEnum可能不是一个很好的选择。

例如:

from enum import Enum

class WaterVapor(Enum):
    VERY_DRY = 0.2
    DRY = 0.5
    MEDIAN = 0.8
    WET = 1.0

例如,如果我要实现 aComparableEnum来实现必要的比较运算符并简单地比较value两个 s 的ComparableEnums,并且我填充了其中的一个 numpy array,那么在对这个数组进行操作时,我仍然可以获得 numpy 的性能优势吗?我的直觉告诉我没有,但我还没有找到明确的答案。

如果我的直觉是正确的,任何替代设计建议也将不胜感激。使用浮点数对于我们将要进行的计算至关重要,numpy 提供的性能增强也是如此。将它们限制为特定值真的很好,但不能以牺牲其他两个因素为代价。

标签: pythonpython-3.xnumpyenums

解决方案


您需要继承自float

from enum import Enum

class WaterVapor(float, Enum):
    VERY_DRY = 0.2
    DRY = 0.5
    MEDIAN = 0.8
    WET = 1.0

print(WaterVapor.VERY_DRY.value)

推荐阅读