【问题标题】:Python: Efficiently convert non-negative integers to between 0 and 1Python:有效地将非负整数转换为 0 到 1 之间
【发布时间】:2019-03-03 13:30:55
【问题描述】:

将整数列表转换为 0 到 1 之间的有效方法是什么,例如:

[0] -> [0]
[9] -> [0.9]
[9, 19] -> [0.09, 0.19]
[9, 19, 1000] -> [0.0009, 0.0019, 0.1]

我在想:

def integer_to_0_1(numpy_array):
    divisor = 10 ** len(str(np.max(numpy_array)))
    return numpy_array/divisor

原因

我正在从其他 2 列的 pandas 数据框中创建一个 ID,但我希望该 ID 是可排序的。因此,与其将 ID 创建为"col1_col2" 之类的 str,我想如果我将其设为col1.col2 之类的数字,它很容易排序并且订单信息不会丢失。例如

---------------              ------------
| col1 | col2 |              | ID       |
| 0    | 0    |      ->      | 0        | 
| 0    | 110  |              | 0.110    |
| 2332 | 3    |              | 2332.003 |

【问题讨论】:

  • 首先需要一个看起来很尴尬的转换。整数列表首先来自哪里?
  • 您当前的代码是否会导致性能问题?
  • 我正在从其他 2 列的 pandas 数据框中创建一个 ID,但我希望该 ID 是可排序的。因此,与其将 ID 创建为像 "col1_col2" 这样的 str,我想如果我将其设为像 col1.col2 这样的数字,它很容易排序并且订单信息不会丢失。
  • 如果其中一个数字为零怎么办?如果一个是负数?
  • 使用factor=10**-len(...) 然后乘法可能比除法快一点。你也可以假设所有元素都是非负的吗?

标签: python performance numpy math computer-science


【解决方案1】:

以下是将值列表映射到 [0,1] 的一种方法。 (包括0和1)

def convert(numpy_array):
    return (numpy_array- np.min(numpy_array))/(np.max(numpy_array) - np.min(numpy_array))

您可以按如下方式映射数组[3, 4, 5, 2, 7]

[0.2 0.4 0.6 0.  1. ]

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2016-04-05
    • 2014-07-21
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多