我有以下数组和函数:
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不显示零的小数?
答案 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]