преобразование из фрейма данных в трехмерный массив в numpy - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть фрейм данных с 8 столбцами, это main_point, sec_point, A, B, C, D, E, число оборотов, поэтому фрейм данных выглядит так:

main_point   sec_point    A         B         C            D           E    numberofsec_points
    1          1          1         1         20           15          23           5   
    1          2          1         2         21           16          25          
    1          3          1         1         22           14          18      
    1          4          2         1         25           13          26          
    1          5          2         1         29           18          28
   ...        ...        ...       ...       ...          ...         ... 
   ...        ...        ...       ...       ...          ...         ...
   20         67          1         2         35           56          34           3
   20         68          2         2         45           40          42         
   20         65          1         2         43           58          44         

I необходимо создать матрицу (3d-массив) в numpy для каждой main_point, этот массив имеет номер sec_point для каждой main_point, а размерность этого массива должна быть (numberofsec_points * numberofsec_points * 10)

i использовал 10, потому что для каждой sec_point я должен использовать данные из 5 столбцов, которые (A, B, C, D, E), и сделать пересечение с другими sec_points для той же главной точки, например, если я хочу сделать 3d-массив для main_point 20, это должен быть массив с размерами (3 * 3 * 10) и должен выглядеть так:

на первый элемент [0,0] Я должен записать данные sec_point 67 (это 5 столбцов, упомянутых выше), пересекающихся с данными 67, поэтому должно быть так (1, 2, 35, 56, 34, 1, 2, 35, 56, 34) и для элемента [0, 1] это должна быть ссылка 67, пересекающаяся с ссылкой 68, поэтому должно быть так (1, 2, 35, 56, 34, 2, 2, 45, 40, 42)

               67                            68                               65 
 67     (1,2,35,56,34,                 (1,2,35,56,34,                     (1,2,35,56,34, 
         1,2,35,56,34)                  2,2,45,40,42)                      1,2,43,58,44)    

 68     (2,2,45,40,42,                 (2,2,45,40,42,                     (2,2,45,40,42,
        1,2,35,56,34)                   2,2,45,40,42)                      1,2,43,58,44)

 65     (1,2,43,58,44                  (1,2,43,58,44                      (1,2,43,58,44
         1,2,35,56,34)                  2,2,45,40,42)                      1,2,43,58,44)         

так, как я могу сформировать этот массив? Я попробовал этот код, но он выдал ошибку

for i in range(len(df)):
  Matrix_Range=df.iloc[i][['numberofsec_points']] #Max Boudnries
  df1=df[['A', 'B', 'c', 'D', 'E']]
  array1=df1.to_numpy()
  array2 = array1.reshape(Matrix_Range, Matrix_Range, 10) 
...