防止Python在这里四舍五入到零?

时间:2020-06-25 20:43:55

标签: python arrays numpy rounding zero

我有以下数组和函数:

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不显示零的小数?

3 个答案:

答案 0 :(得分:4)

我猜发生了什么事,因为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)

答案 1 :(得分:2)

最初的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]

答案 2 :(得分:1)

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

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]