Использование мультииндексации для поиска всех комбинаций, соответствующих определенному шаблону.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование мультииндексации для поиска всех комбинаций, соответствующих определенному шаблону.

Сообщение Anonymous »

Мне нужно написать алгоритм, который берёт N точек и выводит все возможные 3-звёздочки и треугольники, образованные этими точками. Вот пример для пояснения.
Пусть N = 4, тогда у меня 4, выбираю 2 = 6 расстояний, набор

Код: Выделить всё

{(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)}
Мы определяем 3 звезды как 3 дистанции, которые имеют один индекс. Например, {(0,1),(1,2),(1,3) – это звезда, а {(0,1),(1,2),(2,3)}< /код> нет. Треугольник определяется как три расстояния, где первая и вторая, вторая и третья, а также третья и первая пары имеют общий индекс, например {(0,1),(1,2),(0,2), но не {(0,1),(1,2),(1,3).
Мне нужно взять N и вывести список всех такие 3-звездочки и все треугольники. Они могут находиться в одном списке или в разных списках вывода.
Есть ли быстрый способ сделать это? Я использую Python, поэтому у меня есть доступ к мультииндексу pandas, который, я думаю, может быть полезен.
До сих пор я пробовал использовать очень наивный подход, где я просто повторяю 6 переменные от 1 до NC2 и используйте индикаторную функцию, чтобы выделить все треугольники. Еще мне удалось выделить 3 звезды с помощью мультииндекса:

Код: Выделить всё

edges = list(itertools.combinations(range(N),2))
mi = pd.MultiIndex.from_tuples(edges)

# all 3 pairs share 1 index
for i in range(c):
core = mi[i]
arr = np.bitwise_xor(mi.get_level_values(0) == core[0], mi.get_level_values(1) == core[1])
for (outer1, outer2) in itertools.combinations(mi[arr], 2):
if outer1[0] in outer2 or outer1[1] in outer2:
print(core, outer1, outer2)
Но это дублирует каждую из звезд.
Я уверен, что есть простой способ сделать это, но я просто не могу этого сделать. обдумай это, поэтому любая помощь будет оценена по достоинству. Спасибо

Подробнее здесь: https://stackoverflow.com/questions/790 ... in-pattern
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»