У меня есть набор данных в форме (34, 288) и тип данных float64, определенный как DataFrame.Данные варьируются от 80 до -20.
Каждый столбец является продуктом, а строки представляют собой результаты теста в виде временных рядов.
Я хочу подсчитать количество последовательных значений, соответствующих условию (большечем 10) и индекс, где он начинается для каждого столбца, так что у меня будет два массива, состоящих из 288 значений (одно значение для каждого столбца)
Итак, @Divakar помог мне с кодом:
def maxisland_start_len(a, trigger_val, comp_func=np.greater):
pad = np.zeros(a.shape[1],dtype=bool)
mask = np.vstack((pad, comp_func(a,trigger_val), pad))
mask_step = mask[1:] != mask[:-1]
idx = np.flatnonzero(mask_step.T)
island_starts = idx[::2]
island_lens = idx[1::2] - idx[::2]
n_islands_percol = mask_step.sum(0)//2
bins = np.repeat(np.arange(a.shape[1]),n_islands_percol)
scale = island_lens.max()+1
scaled_idx = np.argsort(scale*bins + island_lens)
grp_shift_idx = np.r_[0,n_islands_percol.cumsum()]
max_island_starts = island_starts[scaled_idx[grp_shift_idx[1:]-1]]
max_island_percol_start = max_island_starts%(a.shape[0]+1)
max_island_percol_len = np.maximum.reduceat(island_lens, grp_shift_idx[:-1])
return max_island_percol_start, max_island_percol_len
Итак, я запустил его с помощью:
#converting my DataFrame to Numpy array first
na = df.values
#Then running the method for threshold 5
row_index, length = maxisland_start_len(na, 5)
Это дало ошибку:
IndexError: index 283 out-of-bounds in maximum.reduceat [0, 283)
И странная часть в том, что когда я запускаю для разных значений, это приводит к разнымошибки:
для 10:
IndexError: index 126 out-of-bounds in maximum.reduceat [0, 126)
для 6:
IndexError: index 211 out-of-bounds in maximum.reduceat [0, 211)
Когда я запускаю его для значений ниже 4, он просто отлично работает.Однако это не работает для значений выше 4.
Я даже пытался пропорционально уменьшить числа в исходной таблице, разделив их все на 10, и запустив метод для значения 1. В итоге я получил ошибкуУ меня было значение 10. Так что ничего не изменилось.
У вас есть идеи, почему это происходит?Если у вас есть альтернативный способ, я очень открыт, чтобы попробовать.
Заранее спасибо.