Данные заказа в зависимости от нескольких критериев диапазона - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь упорядочить данные, используя несколько диапазонов. Предположим, у меня есть некоторые данные в массиве 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 и т. Д.

Я очень ценю предложения и возможные решения по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...