Python列表向量矩阵小数0s 1s

时间:2018-04-28 18:59:11

标签: python python-3.x list matrix vector

我在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]]

提前致谢!

2 个答案:

答案 0 :(得分:0)

查看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在评论中提到并在this问题中讨论的那样,如果在python 2上工作,那么会产生所需的输出。

那是因为他们采用了不同的舍入方法。这些例子可以说明不同之处:

Python2:

>>> round(0.5)
1.0

Python3

>>> round(0.5)
0

答案 1 :(得分:0)

有几种方法可以做到这一点;无论是通过列表理解的纯Python还是使用第三方库的矢量化方式。

纯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]]

Vectorised alternative

这使用第三方库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 不是以基本10格式存储数字数据的性质,因此难以将浮点数与浮点数进行比较。有关详细信息,请参阅Is floating point math broken?。即使使用上述方法,这也是一个问题。

这意味着您可能需要特别注意边界情况,如果这对您很重要。