我有一个节点列表(用变量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中对此提供“更好”的支持,因此,如果有更有效的方法,请告诉我。
免责声明:如果您认为这不是一个有用/有趣的问题,请告诉我,因为我很高兴将其删除。