Помогите понять код на Питоне
# threshold by cover threshold thresholded = zip(*numpy.where(probabilities >= self.cover_threshold)) # for each point, assign all other covered points # make sure that each point covers at least itself covering = [set((i,)) for i in range(N)] for x,y in thresholded: covering[x].add(y) # greedily add points that cover most of the others covered = set() universe = set(range(N)) self._extreme_vectors = [] self._covered_vectors = [] while covered != universe: # get the point that covers most of the other points that are not yet covered ev = numpy.argmax([len(c - covered) for c in covering]) # add it to the set of covered points self._extreme_vectors.append(ev) # add the covered points. note that a point might be covered by several EVs self._covered_vectors.append(sorted(covering[ev])) covered.update(covering[ev])Это вход для него:
>>>probabilities array([[1.00000000e+00, 1.56895075e-09], [3.13114925e-06, 1.00000000e+00]]) >>> self.cover_threshold 0.7Это выход:
>>>self._covered_vectors [[0], [1]] >>> self._extreme_vectors [0, 1]
Может кто-то пояснить, что этот код делает простым языком.
Похоже на какую-то странную реализацию жадного алгоритма, но я не могу понять этот код.
Мое предположение, что он тупо раскидывает номера индексов единиц по строкам в массивы одномерные. Но не уверен.
76 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів