Numpy фильтр, используя условие для каждого элемента - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть выражение фильтра следующим образом:

feasible_agents = filter(lambda agent: agent >= cost[task, agent], agents)

, где agents - список Python.

Теперь, чтобы ускориться, я пытаюсьчтобы реализовать это, используя numpy.

Что будет эквивалентно использованию numpy?

Я знаю, что это работает:

threshold = 5.0
feasible_agents = np_agents[np_agents > threshold]

, где np_agents - это эквивалент numpyagents.

Однако я хочу, чтобы порог был функцией каждого элемента в массиве numpy.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Поскольку вы не предоставляете пример данных, используйте игрушечные данные:

# Cost of agents represented by indices of cost, we have agents 0, 1, 2, 3
cost = np.array([4,5,6,2])
# Agents to consider 
np_agents = np.array([0,1,3])
# threshold for each agent. Calculate different thresholds for different agents. Use array of indexes np_agents into cost array.
thresholds = cost[np_agents] # np.array([4,5,2])
feasible_agents = np_agents[np_agents > thresholds] # np.array([3])
0 голосов
/ 18 сентября 2018

Вы можете использовать numpy.extract :

>>> nparr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> nparreven = np.extract(nparr % 2 == 0, nparr)

или numpy.where :

>>> nparr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> nparreven = nparr[np.where(nparr % 2 == 0)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...