Python列表向量矩阵小数0s1s
我有一个python列表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 >&
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]])