下面有一段代码,其中包含一个浮点系数列表,我想将实际上是整数的那些转换为整数(例如2.0,我想变成2)。
所以我有下面的代码,这三个打印功能的输出是:
[ 0. 0. -0. 0. -0. -0. -0. 0. 0.5 0. ]
,
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
和
[ 0. 0. 0. 0. 0. 0. 0. 0. 0.5 0. ]
。
因此,基于打印,它会输入“ if”语句,这表示它确认我的系数实际上是整数(我也尝试过“ is_integer”函数,得到相同的结果),但是由于某种原因,它不会对它们进行转换到整数。有人可以帮我吗?谢谢!
def function(coeffs):
coeffs = np.round(coeffs,2)
print(coeffs)
for w in range(len(coeffs)):
if coeffs[w]-int(coeffs[w])==0.0:
coeffs[w] = int(coeffs[w])
print(coeffs[w])
print(coeffs)
答案 0 :(得分:1)
您的数据可能看起来像是一个numpy数组,带有float dtype。 您正在分配整数回到这个numpy的float数组。 这不会改变个别条目的类型,如numpy的阵列仅具有一个类型的阵列中的所有条目。
您可以产生与结果的新的Python列表。
类似的作品:
result = [ int(x) if x-round(x)<0.0001 else x for x in np.array([1.1, 2.0, 3]) ]
答案 1 :(得分:0)
您可以在循环中添加类型检查条件,例如
if int(coeffs[w]) == coeffs[w]
,因为我怀疑这将是作为一种解决方案更坚固。
此外,我建议创建一个新列表或使用lambda作为修改列表(或在这种情况下,使用numpy
数组,该数组具有 set 数据类型)在您访问它的同时,通常会造成陷阱。
以下内容应该很好用。
new_coeffs = []
def function(coeffs):
coeffs = np.round(coeffs,2)
print(coeffs)
for w in range(len(coeffs)):
if int(coeffs[w]) == coeffs[w]:
new_coeffs.append(int(coeffs[w]))
else:
new_coeffs.append(coeffs[w])
print(new_coeffs)
这将产生以下结果,我怀疑是你所需要的。
>>> new_coeffs = []
>>> a = [1.0, 2.0, 4.1, -8.0, -1.3]
>>> function(a)
[ 1. 2. 4.1 -8. -1.3]
[1, 2, 4.1, -8, -1.3]
答案 2 :(得分:0)
执行此操作的一种方法是检查ceil
和floor
函数是否返回相同的值。对于这样的浮点应该相同。
import math
...
for w in range(len(coeffs)):
if math.floor(coeffs[w]) == math.ceil(coeffs[w]):
print(int(coeffs[w]))
答案 3 :(得分:0)
这将是使用列表理解的好地方。我不明白为什么你给的代码不能正常工作,但我可以给你的代码这将使它的工作。
coeffs = [int(x) if x.is_integer() else x for x in coeffs]
此行通过您的coeffs数组,并且对于每个x,使用您提到的is_integer()
函数检查它是否为整数。如果是,则添加int(x)
,否则添加浮点数本身。