我在 python 中有一个列表
l=[[0.1,0.2,0.9],[0.3,0.4,0.6],[0.8,0.2,0.8]]
如果element <=0.5
,返回0
,如果element > 0.5
,返回1
因此得到的 l 应该如下所示:
l=[[0,0,1],[0,0,1],[1,0,1]]
提前致谢!
我在 python 中有一个列表
l=[[0.1,0.2,0.9],[0.3,0.4,0.6],[0.8,0.2,0.8]]
如果element <=0.5
,返回0
,如果element > 0.5
,返回1
因此得到的 l 应该如下所示:
l=[[0,0,1],[0,0,1],[1,0,1]]
提前致谢!
退房round
。
>>> l=[[0.1,0.2,0.9],[0.3,0.4,0.6],[0.8,0.2,0.8]]
>>> [[round(x) for x in i] for i in l]
[[0, 0, 1], [0, 0, 1], [1, 0, 1]]
正如@iAdjunct 在评论中提到并在这个问题中讨论的那样,如果在 python 2 上工作,这将不会产生所需的输出。
那是因为它们采用了不同的舍入方法。可以通过以下示例说明差异:
Python2:
>>> round(0.5)
1.0
Python3
>>> round(0.5)
0
有几种方法可以做到这一点;通过列表理解在纯 Python 中或使用 3rd 方库以矢量化方式。
纯 Python
您可以使用嵌套列表推导。
l = [[0.1,0.2,0.9],[0.3,0.4,0.6],[0.8,0.2,0.8]]
res = [[0 if i <= 0.5 else 1 for i in row] for row in l]
[[0, 0, 1], [0, 0, 1], [1, 0, 1]]
矢量化替代方案
这使用 3rd 方库numpy
。
import numpy as np
res = np.where(np.array(l) <= 0.5, 0, 1)
array([[0, 0, 1],
[0, 0, 1],
[1, 0, 1]])
舍入注意事项
float
由于不以 base-10 格式存储数字数据的性质,因此很难将浮点数与浮点数进行比较。请参阅浮点数学是否损坏?更多细节。即使使用上述方法,这也是一个问题。
这意味着如果这对您很重要,您可能必须特别注意边界情况。