Я считаю себя опытным пользователем numpy, но им не удалось найти решение для следующей проблемы. Предположим, имеются следующие массивы:Операции с уменьшением числа операций поменьше
# sorted array of times
t = numpy.cumsum(numpy.random.random(size = 100))
# some values associated with the times
x = numpy.random.random(size=100)
# some indices into the time/data array
indices = numpy.cumsum(numpy.random.randint(low = 1, high=10,size = 20))
indices = indices[indices <90] # respect size of 100
if len(indices) % 2: # make number of indices even
indices = indices[:-1]
# select some starting and end indices
istart = indices[0::2]
iend = indices[1::2]
Что теперь я хочу, чтобы уменьшить массив значений x
учитывая интервалы, обозначаемые istart
и iend
. То есть
# e.g. use max reduce, I'll probably also need mean and stdv
what_i_want = numpy.array([numpy.max(x[is:ie]) for is,ie in zip(istart,iend)])
Я уже гугле много, но все, что я смог найти покадрово операции через stride_tricks
, который позволяет только для обычных блоков. Я не смог найти решение без выполнения цикла pyhthon :-( В моих массивах реальных приложений намного больше и производительность имеет значения, поэтому я использую numba.jit
на данный момент.
Есть ли NumPy функции Я недостающее, который в состоянии сделать это
Будет ли 'x' всегда иметь плавающие числа pt в' [0,1) '? – Divakar
№ 'x' в общем случае является гораздо более сложной структурой массива. –