Я пытаюсь подсчитать, сколько элементов превышает некоторые критерии (например: 0,7), а затем преобразовать их в проценты, элемент находится в множественном списке, который выглядит следующим образом:
[[[[0.00173012]
[0.0009075 ]
[0.00080378]
...
[0.00069336]
[0.00074539]
[0.00186453]]
[[0.00081442]
[0.00022855]
[0.00019197]
...
[0.00018318]
[0.00017222]
[0.00075811]]
[[0.00084458]
[0.00020444]
[0.0001783 ]
...
[0.00020849]
[0.00017066]
[0.00070635]]
...
[[0.00073932]
[0.00022051]
[0.00024553]
...
[0.00028661]
[0.00019603]
[0.0007242 ]]
[[0.00085666]
[0.0002345 ]
[0.00021651]
...
[0.0002319 ]
[0.00017067]
[0.00066847]]
[[0.00188439]
[0.00092146]
[0.00082662]
...
[0.00077084]
[0.00066442]
[0.00178707]]]]
информация: есть ...
, потому что это длинный список и он не может вместить весь список в выходную ячейку (изначально это изображение)
Я пробовал использовать:
len(pex > 0.7)/100
#pex is variable contain the multiple list above
но на самом деле это не работает, потому что вывод из len равен всего 1, и если я разделю его на 100, вывод будет всего 0,01
Есть ли способ легко подсчитать все элементы и элементы, которые превышают некоторые критерии, чтобы я мог преобразовать их в проценты?? ТИА
Когда я пытаюсь сравнить список с числом, я получаю сообщение об ошибке.
Если вам разрешено использовать numpy
, это можно легко сделать, рассмотрите следующий пример.
import numpy as np
data = [[[1,2],[3,4]],[[5,6],[7,8]]]
arr = np.array(data) # create numpy.array
print(np.sum(arr>5)) # count elements > 5
print(arr.size) # number of all elements
выход
3
8
Объяснение: преобразуйте вложенные списки в numpy.array
, используйте сравнение, чтобы получить массив одинаковой формы с True
s, где значение больше 5, и False
s в другом месте, затем используйте numpy.sum
(встроенная функция нетsum
), чтобы получить количество, поскольку True
и False
обрабатываются как 1
и 0
при выполнении арифметических операций (это также применимо вне numpy
, например, sum([True,True,True])
дает 3
)
Я не уверен, почему была выбрана эта структура данных, но мне кажется проще просто свести список и подсписок в один список со всеми элементами, а затем выполнить над ним операции:
def flatten(l):
res = []
for el in l:
if type(el) == list:
#If it's a list then we extract all the elements in it
res.extend(flatten(el))
else:
#Only add in the result the non-list elements
res.append(el)
return res
dex = [[[[0.00173012],
[0.0009075 ],
[0.00080378],
[0.00069336],
....
[0.00074539],
[0.00186453]]]]
flatten_dex = flatten(dex)
#Here flatten_dex is [0.00173012, 0.0009075, 0.00080378, 0.00069336, ..., 0.00074539, 0.00186453]
Когда у вас есть этот список, очень просто подсчитать количество элементов, соответствующих условию:
nb_elements_greater_than_0_8 = len([e for e in flatten_dex if e > 0.8])
number_of_total_elements = len(flatten_dex)
Образец
pex
, который вы опубликовали, не является допустимым Python, даже с учетом...
.