У меня есть список списков (2000x1000), но в качестве примера рассмотрим этот (10x3):
l = [[8, 7, 6], [5, 3, 1], [4, 5, 9], [1, 5, 1], [3, 5, 7], [8, 2, 5], [1, 9, 2], [8, 7, 6], [9, 9, 9], [4, 5, 9]]
В этом примере каждый список соответствует 3 измерениям каждого момента:
t0
-> [8,7,6]
t1
-> [5,3,1] и т. Д.
Я хотел бы сравнить измерения сокно из 4 мгновений для позиции и принимает максимальное значение, которое находится в 99 процентиле от пика к пиковому значению.
ПРИМЕР
Давайте рассмотрим первое окно:
[8, 7, 6], [5, 3, 1], [4, 5, 9], [1, 5, 1] :
[8,5,4,1] -> peak to peak: 8-1=7
[7,3,5,5] -> ptp=4
[6,1,9,1] -> ptp=8
с этими 3 значениями [7,6,8]
Я хочу взять максимум в 99 процентов, в данном случае 7
Для второго окна:
[5, 3, 1], [4, 5, 9], [1, 5, 1], [3, 5, 7]:
[5,4,1,3] -> ptp=4
[3,5,5,5] -> ptp=2
[1,9,1,7] -> ptp=8
максимум в 99 процентов -> 4
После того, как я сделаю это для всех окон размера 4, я хочу составить список с этими значениями.
Мой код следующий, но он медленный.Есть ли быстрый способ реализовать это?
ПРИМЕЧАНИЕ: я не могу использовать панд, и версия Numpy должна быть <= 1.6 </h2> num_meas = 4
m = []
for index, i in enumerate(l):
if index < len(l) - num_meas + 1:
p = []
for j in range(len(i)):
t = []
for k in range(num_meas):
t.append(l[index + k][j])
t = [x for x in t if ~np.isnan(x)]
try:
a = np.ptp(t)
except ValueError:
a = 0
p.append(a)
perce = np.percentile(p, 99)
p = max([el for el in p if el < perce])
m.append(p)
print m
Вывод: [7, 4, 7, 6, 5, 7, 7]