Python列表向量矩阵小数0s1s

Python列表向量矩阵小数0s1s,python,python-3.x,list,matrix,vector,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]] 如果元素为0.5,则返回1 因此,结果l应该是这样的: l=[[0,0,1],[0,0,1],[1,0,1]] 提前谢谢 退房 正如@iAdjunct在评论中提到并在讨论中讨论的,如果使用python 2,这将不会产生所需的输出 这是因为它们采用不同的舍入方法。可以通过以下示例来说明区别: 蟒蛇2: >>> round(0.5) 1.0 蟒蛇3 >&

我有一个python列表

l=[[0.1,0.2,0.9],[0.3,0.4,0.6],[0.8,0.2,0.8]]
如果元素为0.5,则返回1

因此,结果l应该是这样的:

l=[[0,0,1],[0,0,1],[1,0,1]]
提前谢谢

退房

正如@iAdjunct在评论中提到并在讨论中讨论的,如果使用python 2,这将不会产生所需的输出

这是因为它们采用不同的舍入方法。可以通过以下示例来说明区别:

蟒蛇2:

>>> round(0.5)
1.0
蟒蛇3

>>> round(0.5)
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]]
关于四舍五入的说明

由于浮点的本质是不以base-10格式存储数字数据,因此比较浮点和浮点是困难的。有关更多详细信息,请参阅。即使使用上述方法,这也是一个问题


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

您的问题是什么?这不是一个代码编写服务。这是一个问答网站。看看。为什么0.5被舍入?注意:他的函数实际上与round不同,因为出于某种原因,他舍入0.5,而不是在python3.6中进行测试,round0.5返回0。Python2.7.10返回1.0。这很奇怪;Python2的round函数与传统的round定义一致,但Python3实现了round-half-to-even范式。
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]]
import numpy as np

res = np.where(np.array(l) <= 0.5, 0, 1)

array([[0, 0, 1],
       [0, 0, 1],
       [1, 0, 1]])