Я пытаюсь упорядочить данные, используя несколько диапазонов. Предположим, у меня есть некоторые данные в массиве tt:
n= 50
b = 20
r = 3
tt = np.array([[[3]*r]*b]*n)
и другие значения в списке:
z = (np.arange(0,5,0.1)).tolist()
Теперь мне нужно отсортировать данные по tt в зависимости от диапазонов от z, которые должны быть в диапазоне от 0 до 1, следующий диапазон - от 1 до 2, следующий - от 2 до 3 и так далее.
Мои попытки к настоящему времени пытались создать массив длины каждого из диапазонов, и использовать эту длину, чтобы вырезать данные из tt. Выглядит примерно так:
za = []
za2 = []
za3 = []
za4 = []
za5 = []
za6 = []
za7 = []
for y in range(50):
if 0 <= int(z[y]) < 1:
za.append(z[y])
zi = array([int(len(za))])
if 1 <= int(z[y]) < 2:
za2.append(z[y])
zi2 = array([int(len(za2))])
if 2 <= int(z[y]) < 3:
za3.append(z[y])
zi3 = array([int(len(za3))])
if 3 <= int(z[y]) < 4:
za4.append(z[y])
zi4 = array([int(len(za4))])
if 4 <= int(z[y]) < 5:
za5.append(z[y])
zi5 = array([int(len(za5))])
if 5 <= int(z[y]) < 6:
za6.append(z[y])
zi6 = array([int(len(za6))])
if 6 <= int(z[y]) < 7:
za7.append(z[y])
zi7 = array([int(len(za7))])
till = np.concatenate((np.array(zi), np.array(zi2), np.array(zi3), np.array(zi4), np.array(zi5), np.array(zi6), np.array(zi7))
ttn = []
for p in range(50):
#if hour_lenght[p] != []
tt_h = np.empty(shape(tt[0:till[p],:,:]))
tt_h[:] = np.nan
tt_h = tt_h[np.newaxis,:,:,:]
tt_h[np.newaxis,:,:,:] = tt[0:till[p],:,:]
ttn.append(tt_h)
Как вы можете догадаться, я получаю сообщение об ошибке "имя 'zi6' не определено", поскольку в этом диапазоне нет данных. Но по крайней мере это делает работу для частей, которые существуют: D. Однако, если я включу else выражение после , если и сделаю что-то вроде:
for y in range(50):
if 0 <= int(z[y]) < 1:
za.append(z[y])
zi = np.array([int(len(za))])
else:
zi = np.array([np.nan])
Мой начальный zi из первой части перезаписывается с помощью nan.
Я также должен отметить, что конечной целью является загрузка нескольких файлов, имеющих форму, аналогичную tt (два последних измерения всегда одинаковы, а первое изменяется, например:
tt.shape
(50, 20, 3)
и некоторые другие tt2 имеют форму:
tt2.shape
(55, 20, 3)
с z2 со значениями от 5 до 9.
z2 = (np.arange(5,9,0.1)).tolist()
Итак, в итоге я должен получить массив ttn wheres
ttn [0] заполняется значениями от tt в диапазоне от 0 до 1,
ttn [1] должен быть заполнен значениями от tt в диапазоне от 1 до 2 и т. Д.
Я очень ценю предложения и возможные решения по этому вопросу.