statistics.stdev
ожидает в качестве аргумента итерацию (например, список) действительных чисел с как минимум двумя значениями. Вы передаете ему переменную lbp
, которая не удовлетворяет этому требованию (это список списков). Вы можете провести простые эксперименты, чтобы увидеть, как ведут себя функции, если документация не совсем понятна. Вот, например, что я сделал:
$ python3
>>> import statistics
>>> help(statistics.stdev)
Help on function stdev in module statistics:
stdev(data, xbar=None)
Return the square root of the sample variance.
See ``variance`` for arguments and other details.
...
>>> help(statistics.variance)
Help on function variance in module statistics:
variance(data, xbar=None)
Return the sample variance of data.
data should be an iterable of Real-valued numbers, with at least two
values.
....
>>> l = [[1.0 ,2.0, 3.0], [4.0, 5.0, 6.0]]
>>> statistics.stdev(l)
Traceback (most recent call last):
...
TypeError: can't convert type 'list' to numerator/denominator
>>> l = [1.0 ,2.0, 3.0]
>>> statistics.stdev(l)
1.0
>>>
Как видите, передача списка списков чисел в stdev
приводит к ошибке, которую вы получаете, тогда как передача списка чисел работает правильно.
Мораль этой истории заключается в том, что локальный двоичный шаблон lbp
, который вы вычисляете двумя строками выше, не соответствует типу, который нужно передать в stdev
.
Вот почему python программа не работает, но вполне вероятно, что основная причина этого - непонимание с вашей стороны того, что следует делать. Если имеет смысл вычислить стандартное отклонение записей в lbp
(и это большое, если я не могу ответить за вас), то вы можете попробовать сгладить lbp
, который представляет собой список списки до одного списка, прежде чем передавать его в stdev
. Но есть ли в этом смысл? Только вы можете ответить на этот вопрос, и только если вы понимаете проблему, которую пытаетесь решить.