Задача разделения массива: на основе значений и пользовательских типов - PullRequest
0 голосов
/ 01 июня 2018

Существует два двумерных ndarray s A и B.

A содержит значения панели для объекта, строки представляют дни, столбцы - разные регионы.В A. есть ~ 3000 столбцов и ~ 5000 строк. Например,

A = array([[ 3.53, 3.56, nan, ..., nan, nan, nan], # day 1 data
   [-4.91, -2.54, nan, ..., nan, nan, nan], # day 2 data
   [-6.31, -3.39, nan, ..., nan, nan, nan], # day 3 data, etc
   ..., 
   [ 0.  , -3.41, nan, ..., 12.69, 2.32, nan],
   [-2.74, -4.14, nan, ..., -8.63, -1.45, nan],
   [-1.74, -7.45, nan, ..., 0.68, -6.52, nan]])

B содержит тип каждого значения, соответствующего A. В общей сложности существует около 30 типов.Например,

B = array([[  'A', 'B', nan, ..., nan, nan, nan], # day 1 type
           [  'A', 'A', nan, ..., nan, nan, nan], # day 2 type, etc
           ...,
           [  'D', 'E', nan, ..., 'I', 'D', nan],
           [  'X', 'Y', nan, ..., 'O', 'S', nan]])

Цель - для каждого дня (строки) регионы должны быть разбиты на 10 групп на основе значений (группа 10> группа 9 ...).И для каждой группы вес каждого типа должен быть равен total number of the type in the row / 10.Например,

 day 1: 
       # of A: 35    -->  weight of A in each group: 3.5
       # of B: 33    -->  weight of B in each group: 3.3
       ...
       # of Z: 6     -->  weight of Z in each group: 0.6 

И результатом должно быть что-то вроде

weight_group_1 = array([[  1,  1,  nan, ..., 0.5, ..., 1, ..., nan, nan, nan]
# And the sum of each group's weights should be equal, if all steps correct.
weight_group_2 = array([[  0,  0,  nan, ..., 1, ..., 0.3, ..., nan, nan, nan]
and so on

Есть ли эффективные алгоритмы для достижения этой цели?Пожалуйста, помогите, заранее спасибо!

...