防止 Python 在此处四舍五入为零?

Prevent Python from rounding down to zero here?

我有以下数组和函数:

import numpy as np
a = np.array([24, 23,  4, 52, 34, 49, 59, 18, 19])

def normalize(a):
    amin, amax = min(a), max(a)
    for i, val in enumerate(a):
        a[i] = (val-amin) / (amax-amin)
    return a

我得到以下结果:

array([0, 0, 0, 0, 0, 0, 1, 0, 0])

如何防止 Python 不显示零的小数位?

由于只有整数,您的初始 np 数组对其单元格使用 int 类型。如果您在初始数组中仅输入一个 X.0 ,它将使用浮点数:

a = np.array([24.0, 23, 4, 52, 34, 49, 59, 18, 19])

>>> print(normalize(a))
[0.36363636 0.34545455 0.  0.87272727 0.54545455 0.81818182  1.  0.25454545 0.27272727]

我想发生的事情是因为 a.dtype 是整数,所以当您使用 a[i] =....

更新单个位置时,所有内容都会转换为整数

一般来说,你应该避免在 numpy:

中循环
a = np.array([24, 23,  4, 52, 34, 49, 59, 18, 19])

def normalize(a):
    # np.min is vectorized. Python's `min` is not
    amin, amax = np.min(a), np.max(a)
    return (a-amin)/(amax-amin)

normalize(a)

您可以通过将数组转换为浮点数来启动该函数。

import numpy as np
a = np.array([24, 23,  4, 52, 34, 49, 59, 18, 19])

def normalize(a1):
    a2 = a1.astype(float)
    amin, amax = min(a2), max(a2)
    return (a2-amin) / (amax-amin)
    
print(normalize(a))

输出:

[0.36363636 0.34545455 0.         0.87272727 0.54545455 0.81818182
1.         0.25454545 0.27272727]