создать индекс логического массива для выбора столбца - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть список узлов (представленный переменной n, в этом простом примере узел - это просто целое число), который мне нужно использовать для выбора из массива. Я хочу выбирать столбцы из данных, пока все узлы не будут использованы в выбранных данных хотя бы один раз. Данные могут быть большими и отсортированы с помощью взвешенных столбцов сверху. Я предполагаю, что это можно решить с помощью двоичной индексации, но я также открыт для других numpy подходов.

>>> import numpy as np
>>> 
>>> # nodes I need to use in selection
>>> n = np.array([1, 2, 3])
>>> 
>>> data = np.array([[1, 1, 2, 2, 2, 3, 4, 5], [1, 1, 2, 2, 3, 3, 3, 3]])
>>> 
>>> # select data columns until all nodes are used
>>> def selector(arr, n):
...     un_used_nodes = set(n)
...     def visitor(row):
...         if not un_used_nodes:
...             return False
...         else:
...             for p in row:
...                 un_used_nodes.discard(p)
...             return True
...     return np.apply_along_axis(visitor, 0, arr)
... 
>>> print(data[:, selector(data, n)])
[[1 1 2 2 2]
 [1 1 2 2 3]]

Я надеялся на "лучшую" поддержку этого в numpy, так что если есть более эффективный способ сделать это, пожалуйста, дайте мне знать.

Отказ от ответственности: Если вы считаете, что это не полезный / интересный вопрос, пожалуйста, дайте мне знать, так как я счастлив удалить его.

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