Использование массивов Numpy в качестве справочных таблиц - PullRequest
8 голосов
/ 19 августа 2010

У меня есть двумерный массив данных Numpy, считанный из файла .csv.Каждая строка представляет точку данных с последним столбцом, содержащим «ключ», который однозначно соответствует «ключу» в другом массиве Numpy - «поисковой таблице» как бы.способ сопоставить строки в первой таблице со значениями во второй?

Ответы [ 2 ]

8 голосов
/ 19 августа 2010

Некоторые примеры данных:

import numpy as np

lookup = np.array([[  1.     ,   3.14   ,   4.14   ],
                   [  2.     ,   2.71818,   3.7    ],
                   [  3.     ,  42.     ,  43.     ]])

a = np.array([[ 1, 11],
              [ 1, 12],
              [ 2, 21],
              [ 3, 31]])

Создание словаря от ключа к номеру строки в таблице поиска:

mapping = dict(zip(lookup[:,0], range(len(lookup))))

Затем можно использовать словарь для сопоставления строк.Например, если вы просто хотите присоединиться к таблицам:

>>> np.hstack((a, np.array([lookup[mapping[key],1:] 
                            for key in a[:,0]])))
array([[  1.     ,  11.     ,   3.14   ,   4.14   ],
       [  1.     ,  12.     ,   3.14   ,   4.14   ],
       [  2.     ,  21.     ,   2.71818,   3.7    ],
       [  3.     ,  31.     ,  42.     ,  43.     ]])    
3 голосов
/ 22 августа 2010

В особом случае, когда индекс можно рассчитать по ключам, словаря можно избежать.Преимущество заключается в том, что можно выбрать ключ таблицы поиска.

Для примера Веборна Льосы:

поиск:

>>> lookup[a[:,0]-1, :]
array([[  1.     ,   3.14   ,   4.14   ],
       [  1.     ,   3.14   ,   4.14   ],
       [  2.     ,   2.71818,   3.7    ],
       [  3.     ,  42.     ,  43.     ]])

объединение:

>>> np.hstack([a, lookup[a[:,0]-1, :]])
array([[  1.     ,  11.     ,   1.     ,   3.14   ,   4.14   ],
       [  1.     ,  12.     ,   1.     ,   3.14   ,   4.14   ],
       [  2.     ,  21.     ,   2.     ,   2.71818,   3.7    ],
       [  3.     ,  31.     ,   3.     ,  42.     ,  43.     ]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...