为列选择创建布尔数组索引

时间:2020-02-06 11:11:11

标签: python numpy

我有一个节点列表(用变量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中对此提供“更好”的支持,因此,如果有更有效的方法,请告诉我。

免责声明:如果您认为这不是一个有用/有趣的问题,请告诉我,因为我很高兴将其删除。

0 个答案:

没有答案