Есть несколько способов сделать это; либо в чистом 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]]
Векторизованная альтернатива
Используется сторонняя библиотека 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. См. Не работает ли математика с плавающей запятой? для более подробной информации. Это проблема даже с вышеуказанными методами.
Это означает, что вам, возможно, придется позаботиться о пограничных случаях, если это важно для вас.